![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск файла в NTFS [D7, WinXP]
Lampochka © (2008-02-14 03:51:00)Доброго здравия господа!!!
Прошу Вас помочь мне решить задачу с поиском любого файла в NTFS.
Я написал программку, которая выводит список всех файлов в таблицу. В FAT32 работает замечательно, в NTFS - отказывается.
var
FileName: String;
cDir: String;
n: Longint;
Fil: OleVariant;
procedure TGlav_Form.Prorisovka;
begin
Glav_Form.ElLabel1.Top := 5;
Glav_Form.ElLabel1.Visible := true;
Glav_Form.ElLabel2.Top := 5;
Glav_Form.ElLabel2.Visible := true;
Glav_Form.ElPopupButton1.Visible := true;
Glav_Form.ElPopupButton2.Visible := true;
end;
procedure Find;
var
SearchRec: TSearchRec;
Date: TDateTime;
begin
GetDir (0, cDir);
if cDir [length(cDir)] <> '\' then cDir := cDir + '\';
FileName := '*.*';
if FindFirst (FileName, faAnyFile, SearchRec) = 0 then
repeat
Application.ProcessMessages;
try
Glav_Form.ElBiProgressBar1.DarkValue := n;
if (SearchRec.Attr and faAnyFile) = SearchRec.Attr then
begin
Glav_Form.Update;
Glav_Form.ElTreeStringGrid1.RowCount := n;
cDir := GetCurrentDir;
if cDir [length(cDir)] <> '\' then cDir := cDir + '\';
Glav_Form.ElTreeStringGrid1.Cells [0, n] := IntToStr (n);
Date := FileDateToDateTime (SearchRec.Time);
Glav_Form.ElTreeStringGrid1.Cells [1, n] := DateToStr (Date);
Glav_Form.ElTreeStringGrid1.Cells [2, n] := SearchRec.Name;
Glav_Form.ElTreeStringGrid1.Cells [4, n] := cDir;
n := n + 1;
end;
except
end;
until FindNext (SearchRec) <> 0;
if FindFirst ('*', faAnyFile, SearchRec) = 0 then
repeat
if (SearchRec.Attr and faDirectory) = faDirectory
then
if SearchRec.Name [1] <> '.' then
begin
chDir (SearchRec.Name);
Find;
ChDir ('..');
end;
until FindNext (SearchRec) <> 0;
end;
procedure TGlav_Form.FormActivate(Sender: TObject);
begin
prorisovka;
end;
procedure TGlav_Form.ElPopupButton1Click(Sender: TObject);
begin
if Glav_Form.ElFolderDialog1.Execute then
begin
Glav_Form.ElLabel2.Caption := 'идет работа...';
Glav_Form.ElBiProgressBar1.Visible := true;
Glav_Form.Update;
cDir := Glav_Form.ElFolderDialog1.Folder;
n := 0;
ChDir (cDir);
Find;
if n = 0 then ShowMessage ('Файлов, удовлетворяющих критерию поиска нет')
else ShowMessage ('Файлы включены в таблицу');
end;
Glav_Form.ElLabel2.Caption := 'ожидание';
Glav_Form.ElBiProgressBar1.Visible := false;
Glav_Form.ElTreeStringGrid1.UseDefaultEditor := true;
end;
procedure TGlav_Form.FormCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean);
begin
prorisovka;
end;
procedure TGlav_Form.ElPopupButton2Click(Sender: TObject);
var
Fil: OleVariant;
begin
Glav_Form.WordApplication1.Documents.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam);
Glav_Form.WordDocument1.ConnectTo(Glav_Form.WordApplication1.ActiveDocument);
for n := 0 to Glav_Form.ElTreeStringGrid1.RowCount do
begin
Glav_Form.WordApplication1.Selection.TypeText (Glav_Form.ElTreeStringGrid1.Rows [n].Text);
end;
Glav_Form.WordApplication1.Visible := true;
end;
procedure TGlav_Form.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
try
Glav_Form.WordApplication1.Quit;
except
end;
end;
procedure TGlav_Form.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Application.Terminate;
end;
end.
Саша (2008-02-15 23:40:00) [1]Злые вы.
Lampochka, глянь суда, должно помочь
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=49572
Германн (2008-02-15 02:53:00) [2]
> ли в похожей ситуации снова на форум за решением ?
>
Угу. Снова.
"И вечный бой. Покой нам только снится!"
:)
А вот на королевстве нет конференции для "начинающих". Что бы это значило?
Riply (2008-02-15 02:42:00) [3]> [9] Lampochka © (14.02.08 23:16)
> ОГРОМНОЕ спасибо, все получилось!!!
"все получилось" - это как понимать надо ?
В смысле чужой код работает ? Так в этом никто и не сомневался.
А может "все получилось" должно означать, что разобрался и понял,
в чем была ошибка, чтобы в похожей ситуации ее не повторять,
что пришло озарение, почему "отсутствие FindClose это плохо" ?
Или в похожей ситуации снова на форум за решением ?
Lampochka (2008-02-14 23:16:00) [4]Удалено модератором
Плохиш (2008-02-14 22:53:00) [5]
> Lampochka © (14.02.08 22:31) [6]
> Мне казалось, что форум для того и существует, чтобы профи
> помогали новичкам, а не издевались!!!
Новичкам здесь помогают, а бездельником и дармоедам - нет. А ты относишься ко вторым, во-первых, т.к. не потрудился запустить отладчик, во-вторых, не описал проблему и в-третих, вывалил сюда кучу букаф, типа разбирайтесь.
ketmar (2008-02-14 22:35:00) [6]>[6] Lampochka © (2008-02-14 22:31:00)
>Мне казалось, что форум для того и существует, чтобы профи помогали
>новичкам, а не издевались!!!
помогали учиться, а не «писали код». за «писали код» уже оплата идёт.
---
Understanding is not required. Only obedience.
Lampochka (2008-02-14 22:31:00) [7]Сергею М.
Нет она не так говорит, как можно видеть в моем коде - 'Файлов, удовлетворяющих критерию поиска нет'
Плохишу.
Мне казалось, что форум для того и существует, чтобы профи помогали новичкам, а не издевались!!!
Все равно спасибо, господа профи!!!
Anatoly Podgoretsky (2008-02-14 14:03:00) [8]> Игорь Шевченко (14.02.2008 12:51:04) [4]
Так тоже правильно, только не у партизан.
Игорь Шевченко (2008-02-14 12:51:00) [9]Хинт: У файлов в NTFS имеются дополнительные атрибуты.
Смотри код сравнения атрибутов. Желательно в отладчике.
if (SearchRec.Attr and faAnyFile) = SearchRec.Attr then
(наверное) менять на if (SearchRec.Attr and faAnyFile) = faAnyFile then
Плохиш (2008-02-14 10:35:00) [10]
> Lampochka © (14.02.08 03:51)
Я не понял, это мы должны отладить твой код?
Slym (2008-02-14 09:48:00) [11]1. Ниодного FindClose я не нашел, а это плохо :)
2. Смена текущего каталога зачем? Без него никак?
procedure Find(Path:string);
var
SearchRec: TSearchRec;
n:integer;
begin
Path:=IncludeTrailingPathDelimiter(Path);
if FindFirst (Path+'*', faAnyFile, SearchRec) = 0 then
repeat
if (SearchRec.Attr and faDirectory) = 0 then
begin
Glav_Form.Update;
Glav_Form.ElTreeStringGrid1.RowCount:=Glav_Form.ElTreeStringGrid1.RowCount+1;
n:=Glav_Form.ElTreeStringGrid1.RowCount;
Glav_Form.ElBiProgressBar1.DarkValue:=n;
Glav_Form.ElTreeStringGrid1.Cells [0, n] := IntToStr (n);
Glav_Form.ElTreeStringGrid1.Cells [1, n] := DateToStr (FileDateToDateTime (SearchRec.Time));
Glav_Form.ElTreeStringGrid1.Cells [2, n] := SearchRec.Name;
Glav_Form.ElTreeStringGrid1.Cells [4, n] := Path;
end;
until FindNext (SearchRec) <> 0;
FindClose(SearchRec);
if FindFirst(Path+'*', faDirectory, SearchRec) = 0 then
repeat
if SearchRec.Name[1]<>'.' then
Find(Path+SearchRec.Name);
until FindNext (SearchRec) <> 0;
FindClose(SearchRec);
end;
Find(Glav_Form.ElFolderDialog1.Folder);
Сергей М. (2008-02-14 09:09:00) [12]
> в NTFS - отказывается
Что, прямо вот так и говорит - "работать отказываюсь" ?)