Witam Waść!
Mam pewne problemy z rekurencją, mianowicie przerobiłem kod źródłowy Adama Boducha tak aby usuwał pliki przy wyszukiwaniu. No i usuwa ale nie usuwa na końcu katalogów. Wpadłem na pomysł że po skończonej pętli będzie usuwać katalogi przez rmdir, bo przecież są już puste. Ale gdzie tam! Przy wyszukiwaniu pętla spisuje nazwy katalogów do listboxa. A ja na końcu chciałem tylko:
for i:=0 to listbox1.items.count do
rmdir(listbox1.items[i]);
teoretycznie powinno działać, bo poprzednia pętla wywaliła wszystkie pliki i spisała adresy do listboxa. I co? Wywala błąd, że katalog nie pusty! :-/ Dobra zamieszczam pełny kod, zastanówcie się nad tym:
{------------------------------------------
------------------ KOD ------------------
------------------------------------------}
procedure TForm1.SearchDir(StartPath: String);
var
SR: TSearchRec;
Found : Integer;
function IsDir(Value : String) : String;
begin
if Value[Length(Value)] <> '' then
Result := Value + '' else Result := Value;
end;
begin
Found := FindFirst(IsDir(StartPath) + '*.*', faDirectory, SR);
while Found = 0 do
begin
Application.ProcessMessages;
if ((SR.Attr and faDirectory) = faDirectory) and
((SR.Name <> '.') and (SR.Name <> '..')) then
begin
ListBox1.Items.Add(IsDir(StartPath) + SR.Name);
SearchDir(IsDir(StartPath) + SR.Name); {<-- w tym miejscu nastŕpuje wywo│anie
samej siebie }
end;
deletefile(StartPath+''+Sr.Name);
Found := FindNext(SR);
end;
FindClose(SR);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
SearchDir('e:\ 1'); //bez spacji
for i:=0 to listbox1.items.count do
rmdir(listbox1.items[i]);
end;
Pozdrawiam Kamil :-)