Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Рекурсивный обход папок,,, или не рекурсивный... [D5, D7, Win2k, WinXP]


Dust ©   (2006-04-14 11:56:00) 

Люди, поделитесь алгоритмом, голова не работает уже и времени нет. Нужно найти все файлы в папке и подпапках...


Dust   (2006-04-14 12:43:00) [1]

угу, пасибо


jack128   (2006-04-14 12:36:00) [2]

б-р-р-р..  try-finally чтоли поставили бы..

я таким шабломом пользуюсь:

type
 TIterateFileProc = procedure (const Filename: string;
   const FFD: TWin32FindData; var Continue: boolean) of object;

function IterateFiles(StartDir: string; FileMask: string;
 Callback: TIterateFileProc; Recurse: boolean = True): boolean;
var
 ffd: TWIN32FindData;
 ffh: THandle;
begin
 Assert(Assigned(Callback));
 if StartDir = '' then
   raise Exception.Create('Введите директорию');
 Result := True;
 if StartDir[Length(StartDir)] <> '\' then
   StartDir := StartDir + '\';
 ffh := FindFirstFile(PChar(StartDir + FileMask), ffd);
 if ffh <> INVALID_HANDLE_VALUE then
   try
     repeat
       if not ((string(ffd.cFileName) = '.') or (string(ffd.cFileName) = '..')) then
       begin
         Callback(StartDir + ffd.cFileName, ffd, Result);
         if not Result then Exit;
         if Recurse and ((ffd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) then
         begin
           Result := IterateFiles(StartDir + ffd.cFileName, FileMask, Callback);
           if not Result then Exit;
         end;
       end;
     until not FindNextFile(ffh, ffd);
   finally
     Windows.FindClose(ffh);
   end;
end;


Dmitrij_K   (2006-04-14 12:19:00) [3]

Procedure ScanDir(Dir:string);
var SearchRec:TSearchRec;
begin
if Dir<>'' then if Dir[length(Dir)]<>'\' then Dir:=Dir+'\';  
if FindFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then  
repeat  
if (SearchRec.name='.') or (SearchRec.name='..') then continue;  
if (SearchRec.Attr and faDirectory)<>0 then  
ScanDir(Dir+SearchRec.name) //we found Directory: "Dir+SearchRec.name"  
else  
Showmessage(Dir+SearchRec.name); //we found File: "Dir+SearchRec.name"  
until FindNext(SearchRec)<>0;  
FindClose(SearchRec);  
end;


------------------
www.DRKB.ru


Kolan   (2006-04-14 12:18:00) [4]

FindFirst итд. Полно в нете...


Anatoly Podgoretsky   (2006-04-14 12:14:00) [5]

Рекурсивный


Наверх

Титульная страница Поиск, карта сайта Написать письмо