szukanie katalogów

0

procedure TForm1.Button1Click(Sender: TObject);
var
SR : TSearchRec; // rekord
Found : Integer; // zmienna oznacza ilosc znalezionych plikow

begin

Found := FindFirst(DirectoryListBox1.Directory + '' + Edit1.Text, faDirectory, SR );

while ( Found = 0 ) do
begin
if (SR.Name<>'.') and (SR.Name<>'..') then
begin

// tu cos robi z katalogami

end;
Found := FindNext(SR); // kontynuuj przeszukiwanie

end;
FindClose(SR); // zakoncz przeszukiwanie
end;

Ta procedura powinna wyszukiwać tylko katalogi, a wyszukuje takze pliki. Dlaczego ?

0

Niestety FindFirst czasem sie myli :)
Dlatego trzeba po znalezieniu jeszcze sprawdzic atrybuty z TSearchRec.

/* Do berla:
A to nie poprawianie po pomylkach? :>
if (sr.Attr and FileAttrs) = sr.Attr then
*/

0

U mnie takie coś działa bez mylenia się :

var
  sr: TSearchRec;
  FileAttrs: Integer;
  found : integer;
begin
  found := 0;
  FileAttrs := faDirectory;
  if FindFirst('c:\*.*', FileAttrs, sr) = 0 then begin
    if (sr.Attr and FileAttrs) = sr.Attr then begin
      found := found + 1;
      //tu coś robi z pierwszym znalezionym
      //można wstawic procedurę
    end;
    while FindNext(sr) = 0 do begin
      if (sr.Attr and FileAttrs) = sr.Attr then begin
        found := found + 1;
        //tu coś robi z kolejnymi
        //można wstawic procedurę tą samą co wyżej
      end;
    end;
    FindClose(sr);
  end;
end;

Żywcem wycięte z helpa i nieco przerobione.

1 użytkowników online, w tym zalogowanych: 0, gości: 1