Чтобы поиск происходил например по всему диску или определённому
каталогу.
А то много файлов пропускает (хрен знает почему)!!!!
Как в Delphi замутить поиск файлов?
Модератор: Taifun
- SecondShadow
- Сообщения: 103
- Зарегистрирован: Пт, 18 июл 2003 00:07:51
Re: Как в Delphi замутить поиск файлов?
Andrey писал(а):Чтобы поиск происходил например по всему диску или определённому
каталогу.
А то много файлов пропускает (хрен знает почему)!!!!
Спроси у [email protected]
Vadim aka Second Shadow
Re: Как в Delphi замутить поиск файлов?
Каким образом ты осуществляешь поиск файлов?Andrey писал(а):Чтобы поиск происходил например по всему диску или определённому
каталогу.
А то много файлов пропускает (хрен знает почему)!!!!
Я бы делал это с помощью FindFirst и FindNext... Пока в голову другие способы не приходят...
- SecondShadow
- Сообщения: 103
- Зарегистрирован: Пт, 18 июл 2003 00:07:51
Re: Как в Delphi замутить поиск файлов?
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
-
- Сообщения: 1
- Зарегистрирован: Пт, 03 дек 2004 14:33:02
- Откуда: Nikolaev
- Контактная информация:
Поиск файла на диске.
Ищет все файлы соответствующие маске на диске начиная с директории 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
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