Форум: "Основная";
Текущий архив: 2004.03.09;
Скачать: [xml.tar.bz2];
ВнизОпределение размера директории Найти похожие ветки
← →
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 вся ветка
Форум: "Основная";
Текущий архив: 2004.03.09;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c