function GetDirSize (dir: string; subdir: boolean): longint; var rec: TSearchRec; found: integer; begin result:=0; if dir[length(dir)]<>'\' then dir:=dir+'\'; found:= findfirst(dir+'*.*', faAnyFile, rec); while found=0 do begin inc(result,rec.size); if (rec.Attr and faDirectory>0) and (rec.Name[1]<>'.') and (subdir=true) then inc(result, getdirsize(dir+rec.Name, true)); found:=findnext(rec); end; findclose(rec); end;
procedure TForm1.Button1Click(Sender:TObject); begin label1.Caption:=FloatToStr(GetDirSize('e:\download',false)/sqr(1024))+'MBytes'; label2.Caption:=FloatToStr(GetDirSize('e:\download',true)/sqr(1024))+'MBytes'; end;
function GetFolderSize2(vFolder: String): Int64; var sr: TSearchRec; begin Result := 0; if FindFirst(vFolder + '*.*', faAnyFile, sr) = 0 then repeat if (sr.Name <> '.') and (sr.Name <> '..') then begin Result := Result + sr.Size; if (sr.Attr and faDirectory) <> 0 then Result := Result + GetFolderSize(vFolder + sr.Name + '\'); end; until FindNext(sr) <> 0; FindClose(sr); end; ------------------------------------ 调用ShowMessage(IntToStr(GetFolderSize('e:\')));//注意参数最后一个字母应该为'\'