Delphi a adresáre

Programovacie jazyky, rady, poradňa...
beluský
Darca
Darca
Používateľov profilový obrázok
Príspevky: 317
Registrovaný: 21 sep 2006, 13:46

Delphi a adresáre

Príspevok od používateľa beluský »

Ako zistím veľkosť adresára a počet všetkých vnorených adresárov v ňom??

Táto funkcia... :

Kód: Vybrať všetko

function TForm1.DirFullSize(Path: string): Int64;
 var sr: TSearchRec; A: integer; Size: Integer;
function DirSize(Path: string): Int64;
 var sr: TSearchRec; A: integer; Size: Integer;
begin
Size:=0;
A:=FindFirst(Path+'\*.*',faAnyFile, sr);
While A=0 do
 begin
 If (sr.attr<>faDirectory) and ((sr.name<>'.') and (sr.name<>'..')) THEN size:=size+sr.size;
 A:=FindNext(sr);
 end;
FindClose(sr);
DirSize:=Size;
end;
begin
Size:=DirSize(Path);
A:=FindFirst(Path+'\*.*',faAnyFile, sr);
While A=0 do
 begin
 If (sr.attr=faDirectory) and ((sr.name<>'.')and(sr.name<>'..')) THEN size:=size+DirSize(Path+'\'+sr.Name);
 A:=FindNext(sr);
 end;
FindClose(sr);
DirFullSize:=Size;
end;
... to nerobí korektne, keď sú v aresároch aj súbory aj ďalšievnorené adresáre súčastne...

Počet súborov viem, ale neviem počet adresárov... vďaka za pomoc!
programator
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 18 apr 2005, 8:31
Bydlisko: Papua new Guinea
Kontaktovať používateľa:

Príspevok od používateľa programator »

Jednoducho sa to da upravit rekurzivne. Vysledok vracia v Bajtoch (Testoval som to) :

Kód: Vybrať všetko

function DirFullSize(Path: string): Int64;
var sr: TSearchRec; A: integer; Size: Integer;

   function DirSize(Path: string): Int64;
   var sr: TSearchRec; A: integer; Size: Integer;
   begin
      Size:=0;
      A:=FindFirst(Path+'\*.*',faAnyFile, sr);
      While A=0 do begin
         If (sr.attr<>faDirectory) and ((sr.name<>'.') and (sr.name<>'..')) THEN
            size:=size+sr.size;
            
         A:=FindNext(sr);
      end;
      FindClose(sr);
      Result := Size;
   end;

begin
   Size:=DirSize(Path);
   A:=FindFirst(Path + '\*.*', faAnyFile, sr);

   While A=0 do begin
      If (sr.attr = faDirectory) and ((sr.name <> '.') and (sr.name <> '..')) THEN begin
         size:=size+DirSize(Path + '\' + sr.Name);
         DirFullSize(Path + '\' + sr.Name);
      end;

      A:=FindNext(sr);
   end;

   FindClose(sr);

   Result := Size;
end;
beluský
Darca
Darca
Používateľov profilový obrázok
Príspevky: 317
Registrovaný: 21 sep 2006, 13:46

vďaka

Príspevok od používateľa beluský »

no na jednom súbore to funguje na inom nie... nechápem prečo:( ale vďaka za pomoc...
... vie mi niekto pomôcť?
Napísať odpoveď