Проход дерева каталогов

Материал из DRKB

Проход дерева каталогов[править | править код]

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;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ScanDir('c:');
end;


Ненамного сложнее, но возможностей поболе будет.

procedure ScanDir(Path: string; SearchMask: TStrings; ScanSub: Boolean);
var
  SearchRec: TSearchrec;
  a, i: Integer;
begin
  if ScanSub then
  begin
    FindFirst(path + '\*.*', faDirectory, SearchRec); { . found }
    FindNext(SearchRec); { .. found }
    a := FindNext(SearchRec);
    while a = 0 do
    begin
      if (SearchRec.Attr and faDirectory) > 0 then
        ScanDir(Path + '\' + SearchRec.Name, SearchMask, ScanSub);
      a := FindNext(SearchRec);
    end;
    FindClose(SearchRec);
  end;
  for i := 0 to SearchMask.Count-1 do
  begin
    a := FindFirst(Path + '\' + SearchMask[i], faAnyFile, SearchRec);
    while a = 0 do
    begin
      { operation on file }
      a := FindNext(SearchRec);
    end;
    FindClose(SearchRec);
  end;
end;


Author: Vit
Автор December
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 03154