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

Обсуждение ПО и железа

Модератор: Taifun

Ответить
Andrey
Сообщения: 11
Зарегистрирован: Вс, 02 мар 2003 19:56:01
Откуда: BIYSK
Контактная информация:

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

Сообщение Andrey »

Чтобы поиск происходил например по всему диску или определённому
каталогу.

А то много файлов пропускает (хрен знает почему)!!!!
Аватара пользователя
SecondShadow
Сообщения: 103
Зарегистрирован: Пт, 18 июл 2003 00:07:51

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

Сообщение SecondShadow »

Andrey писал(а):Чтобы поиск происходил например по всему диску или определённому
каталогу.

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


Спроси у [email protected] 8)
Vadim aka Second Shadow
Аватара пользователя
Executor
Сообщения: 2642
Зарегистрирован: Пт, 07 мар 2003 20:41:08
Контактная информация:

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

Сообщение Executor »

Andrey писал(а):Чтобы поиск происходил например по всему диску или определённому
каталогу.

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

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

Сообщение 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;

Навскидку и без комментариев, процедура не доделана, но смысл понятен
Vadim aka Second Shadow
basil_cat
Сообщения: 1
Зарегистрирован: Пт, 03 дек 2004 14:33:02
Откуда: Nikolaev
Контактная информация:

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

Сообщение 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

:)
Basil
Ответить

Вернуться в «Software & hardware»