Вниз
Скачать: CL | DM;

Определение размера директории   Найти похожие ветки 

 
Kair ©   (2004-02-25 10:32) [0]

Так, сделал такое

function GetDirectorySize(Path: String; drSize: Integer): Integer;
var
sr: TSearchRec;
begin
Result := drSize;
if Path[Length(Path)] <> "\" then Path := Path + "\";
if FindFirst(Path + "*.*", faAnyFile, sr) = 0 then
repeat
if (sr.Name <> ".") and (sr.Name <> "..") then
if (sr.Attr and faDirectory) = faDirectory then
Result := GetDirectorySize(Path + sr.Name, Result) else
Result := Result + sr.Size;
until FindNext(sr) <> 0;
FindClose(sr);
end;

Пример:
Caption := IntToStr(GetDirectorySize("C:\", 0));

Кстати, поставив вместо sr.Size единицу, можно считать кол-во файлов.

Но вышла одна заковырка - если задать путь "C:\XXX", то все гуд, а если задать путь "C:\", то почему-то размер неправильно определяет, хотя кол-во файлов правильно выводит. В связи с этим было бы весьма интересно получить объяснение сего поведения
функции, теоретически мною не задуманного.


 
PVOzerski ©   (2004-02-25 11:28) [1]

А по сравнению с чем получается неправильно? И действительно ли неправильно (с учетом, например, возможного изменения размера swap-файла в ходе сканирования)?


 
Kair ©   (2004-02-26 12:04) [2]

По сравнению, чем Эксплорер показывает


 
Андрей Сенченко ©   (2004-02-26 12:07) [3]

Если размер посчитать и показать в байтах и килобайтах - цифры вполне могут отличаться в результате округлений например


 
Kair ©   (2004-02-27 08:38) [4]

А блин, понял!
На диске С: занятый размер больше чем 2Гб. А Integer только до 2 млрд. значение имеет. Надо использовать Int64.

Всем спасибо...



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.016 c
1-25766
Kraj
2004-02-26 15:40
2004.03.09
Преобразование Char в Word


7-25955
Skyhawk
2003-12-19 17:29
2004.03.09
COM сервер


14-25931
Dr.Karter
2004-02-11 14:38
2004.03.09
Восстановление удаленных файлов


1-25789
Ivolg
2004-02-26 11:14
2004.03.09
Загружение с dll


14-25886
Думкин
2004-02-16 06:01
2004.03.09
С днем рождения! 16 февраля.




   Наверх