Страница 1 из 1

Как в Delphi замутить поиск файлов?

Добавлено: Вт, 10 июн 2003 23:44:09
Andrey
Чтобы поиск происходил например по всему диску или определённому
каталогу.

А то много файлов пропускает (хрен знает почему)!!!!

Re: Как в Delphi замутить поиск файлов?

Добавлено: Пт, 18 июл 2003 00:43:34
SecondShadow
Andrey писал(а):Чтобы поиск происходил например по всему диску или определённому
каталогу.

А то много файлов пропускает (хрен знает почему)!!!!


Спроси у [email protected] 8)

Re: Как в Delphi замутить поиск файлов?

Добавлено: Сб, 19 июл 2003 22:13:14
Executor
Andrey писал(а):Чтобы поиск происходил например по всему диску или определённому
каталогу.

А то много файлов пропускает (хрен знает почему)!!!!
Каким образом ты осуществляешь поиск файлов?
Я бы делал это с помощью FindFirst и FindNext... Пока в голову другие способы не приходят... :)

Re: Как в Delphi замутить поиск файлов?

Добавлено: Вт, 22 июл 2003 00:47:26
SecondShadow
Andrey писал(а):Чтобы поиск происходил например по всему диску или определённому
каталогу.

А то много файлов пропускает (хрен знает почему)!!!!


procedure SearchFilms(sPath: string);
function FilmExists(FileName: TFileName): boolean;
var
I: integer;
begin
for I:= 0 to FilePaths.Count - 1 do
if FilePaths = FileName then
begin
Result:= true;
exit;
end;
Result:= false;
end;
var
PathResult: TStrings;
FileInfo: TSearchRec;
I: Integer;
begin
if not FormMain.acSearchFilms.Checked then exit;
PathResult:= TStringList.Create;
begin
if FindFirst(sPath + '\*.*', faAnyFile, FileInfo) = 0 then
begin
repeat
if (FileInfo.Attr and faDirectory = faDirectory)
and (FileInfo.Name <> '.') and (FileInfo.Name <> '..') then
PathResult.Add(sPath + '\' + FileInfo.Name)
else if (AnsiLowerCase(ExtractFileExt(FileInfo.Name)) = '.avi') and
(FilmExists(sPath + '\' + FileInfo.Name) = false) then
SearchDlg.lbSearchResult.Items.Add(sPath + '\' + FileInfo.Name);
Application.ProcessMessages;
until FindNext(FileInfo) <> 0;
FindClose(FileInfo);
end;
end;
if PathResult.Count > 0 then
for I:= 0 to PathResult.Count - 1 do
SearchFilms(PathResult);
PathResult.Free;
end;

Навскидку и без комментариев, процедура не доделана, но смысл понятен

Поиск файла на диске.

Добавлено: Пт, 03 дек 2004 14:41:11
basil_cat
Ищет все файлы соответствующие маске на диске начиная с директории dir и вглубь (это может быть и диск, скажем D:\) и в отличие от предыдущих действительно работает:

procedure FindFile(dir: string);
var
sr:TSearchRec;
begin
dir:=IncludeTrailingBackslash(dir);
ChDir(dir);
if FindFirst(EditFileSearch.Text, faAnyFile, sr) = 0 then
begin
repeat
ListBoxSearch.Items.Add(dir+sr.Name);
until FindNext(sr) <> 0;
SysUtils.FindClose(sr);
end;

if FindFirst('*.', faDirectory, sr) = 0 then
begin
repeat
if (sr.Name<>'.')and(sr.name<>'..')and(sr.Attr=faDirectory) then
begin
//ListBox1.Items.Add(dir+sr.Name);
Panel_Flash.SetError(sr.Name,cf_Message);
Application.ProcessMessages;
FindFile(dir+sr.Name);
end;
until FindNext(sr) <> 0;
SysUtils.FindClose(sr);
end;

end;

EditFileSearch - TEdit
ListBoxSearch - TListBox

:)