Советы по Delphi

         

Как мне подсчитать занимаемое директорией место?


Попробуйте следующий код (он просматривает скрытые, системные, архивные и нормальные файлы, использует рекурсивный алгоритм для просмотра всех вложенных поддиректорий: достаточно указать стартовый каталог и функция возвратит результат в переменной DirBytes, имейте в виду, что для определения типа (файл или директория) код использует функции FileExists и DirectoryExists вместо просмотра атрибутов файла. Причина этого проста - при просмотре CD-ROM функции FindFirst и FindNext иногда заявляют, что файл является каталогом. В коде я обошел эту ошибку. Возвращаемая размерность - байты.):

    var
DirBytes : integer;
function TFileBrowser.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;
[000081]



Содержание раздела