WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  Delphi
  Поиск файлов

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Поиск файлов
Eugeniy опубликован 11-12-2001 07:39 MSK   Click Here to See the Profile for Eugeniy   Click Here to Email Eugeniy  
Доброго времени суток. У меня такая маленькая проблема,... Мне необходимо реализовать поиск файлов на локальных дисках (во всех! папках) по заданной маске. Подскажите, может API какая есть? Или еще что? Или без формирования дерева каталогов здесь не обойтись? Заранее благодарен за любой ответ.
Alone God опубликован 11-12-2001 10:29 MSK     Click Here to See the Profile for Alone God  Click Here to Email Alone God     
А чем тебя не устраивает рекурсивный поиск по всем подкаталогам? Просто и со вкусом...
hlod опубликован 11-12-2001 20:43 MSK     Click Here to See the Profile for hlod  Click Here to Email hlod     
Var c:longbool;
area:_WIN32_FIND_DATAA;

...
exists:=FindFirstFile(PChar(split.space),area);
If exists=INVALID_HANDLE_VALUE then
begin
...
end;
While c<>false do
begin
if (Area.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY)>0 then begin
...
end;
c:=FindNextFile(exists,area);
end;
FindClose(exists);


Чтиай SDK - и все будет понятнее.

hlod опубликован 11-12-2001 20:45 MSK     Click Here to See the Profile for hlod  Click Here to Email hlod     
Я енто из своей проги выдрал, там split.space
это путь к каталогу с маской.
Dimka Maslov опубликован 12-12-2001 14:08 MSK     Click Here to See the Profile for Dimka Maslov  Click Here to Email Dimka Maslov     
unit FindFile;

interface

uses Windows, SysUtils, Classes, Masks;


procedure GetLogicalDriveList(const List: TStrings);
procedure GetFixedDriveList(const List: TStrings);
procedure FindFiles(Path, Mask: string; List: TStrings; IncludeSubDir: Boolean = True);

implementation

procedure GetLogicalDriveList(const List: TStrings);
var
Size, Pos: Cardinal;
Buffer: array[0..127] of AnsiChar;
P: PChar;
begin
List.BeginUpdate;
try
List.Clear;
Size:=GetLogicalDriveStrings(SizeOf(Buffer), Buffer);
Pos:=0;
while Pos<Size do begin
P:=@Buffer[Pos];
List.Add(P);
while Buffer[Pos]<>#0 do Inc(Pos);
Inc(Pos);
end;
finally
List.EndUpdate;
end;
end;

procedure GetFixedDriveList(const List: TStrings);
var
Size, Pos: Cardinal;
Buffer: array[0..127] of AnsiChar;
P: PChar;
begin
List.BeginUpdate;
try
List.Clear;
Size:=GetLogicalDriveStrings(SizeOf(Buffer), Buffer);
Pos:=0;
while Pos<Size do begin
P:=@Buffer[Pos];
if GetDriveType(P) = DRIVE_FIXED then List.Add(P);
while Buffer[Pos]<>#0 do Inc(Pos);
Inc(Pos);
end;
finally
List.EndUpdate;
end;
end;


procedure FindFiles(Path, Mask: string; List: TStrings; IncludeSubDir: Boolean = True);
var
SearchRec: TSearchRec;
FindResult: Integer;
begin
List.BeginUpdate;
try
Path:=IncludeTrailingBackSlash(Path);
FindResult:=FindFirst(Path+'*.*', faAnyFile, SearchRec);
try
while FindResult = 0 do with SearchRec do begin
if (Attr and faDirectory<>0) then begin
if IncludeSubDir and (Name<>'..') and (Name<>'.')
then FindFiles(Path+Name, Mask, List, IncludeSubDir);
end else begin
if MatchesMask(Name, Mask) then List.Add(Path+Name);
end;
FindResult:=FindNext(SearchRec);
end;
finally
FindClose(SearchRec);
end;
finally
List.EndUpdate;
end;
end;


end.

Eugeniy опубликован 13-12-2001 04:57 MSK     Click Here to See the Profile for Eugeniy  Click Here to Email Eugeniy     
Привет Всем! Огромное спасибо за участие! Особую благодарность выражаю
Dimke Maslovu за исчерпывающий ответ и грамотно, без лишних действий,
написанные исходники. Хм, сам поражаюсь, неужели стоило задавать этот,
как мне теперь кажется тривиальный если не дурацкий, вопрос в форуме? :)
Но я думаю эта информация будет здесь не лишней :-) Ещё раз спасибо всем!!!

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.