rozmiar katalogu

0

Znalazłem taką procedurkę:


var
  DirBytes : integer;

function DirSize(Dir:string):integer;
var
  SearchRec : TSearchRec;
  Separator : string;
begin
  if Copy(Dir,Length(Dir),1)='\\' then
    Separator := ''
  else
    Separator := '\\';
  if FindFirst(Dir+Separator+'*.*',faAnyFile,SearchRec) = 0 then begin
    if FileExists(Dir+Separator+SearchRec.Name) then begin
      DirBytes := DirBytes + SearchRec.Size;
      {Memo1.Lines.Add(Dir+Separator+SearchRec.Name);}
    end else if DirectoryExists(Dir+Separator+SearchRec.Name) then begin
      if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then begin
        DirSize(Dir+Separator+SearchRec.Name);
      end;
    end;
    while FindNext(SearchRec) = 0 do begin
      if FileExists(Dir+Separator+SearchRec.Name) then begin
        DirBytes := DirBytes + SearchRec.Size;
        {Memo1.Lines.Add(Dir+Separator+SearchRec.Name);}
      end else if DirectoryExists(Dir+Separator+SearchRec.Name) then
      begin
        if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then begin
          DirSize(Dir+Separator+SearchRec.Name);
        end;
      end;
    end;
  end;
  FindClose(SearchRec);
end;

procedure TForm1.Label1Click(Sender: TObject);
begin
label1.Caption:=IntToStr(  DirSize('c:\\download\\') );
end;

Ale wielkość każdego katalogu otrzymuję 9772628
O co tu chodzi?

0

Może lepiej skorzystać z kodu z FAQ http://4programmers.net/faq.php?id=154 .

0

dzięki za link... to rozwiązanie podaje rozmiar plików w katalogu ale pomija podkatalogi. Czy jesteś w stanie mi w tym pomóc?

0

Ostatnio ktoś napisał dość ładny art o rekurencji. Poza tym, poszukaj na stronce algorytmu przeszukiwania folderów i odpowiedio zmodyfikuj swój kod. :]

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