Форум: "Основная";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];
ВнизБыстро получить размер каталога Найти похожие ветки
← →
Status (2004-02-23 00:48) [0]Как быстро получить размер каталога большого объёма (допустим в папке около 1000 картинок и папка занимает более 500 МБ).
Я использую следующую процедуру. Когда с помощью неё получаю размер большого каталога, то это занимает несколько секунд:
procedure GetDirSize(Dir: string);
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 + GetFileSize(Dir + Separator +SearchRec.name);
end
else
if DirectoryExists(Dir + Separator + SearchRec.Name) then begin
if (SearchRec.Name <> ".") and (SearchRec.Name <> "..") then
GetDirSize(Dir + Separator + SearchRec.Name);
end;
while FindNext(SearchRec) = 0 do begin
if FileExists(Dir + Separator + SearchRec.Name) then begin
DirBytes := DirBytes + GetFileSize(Dir + Separator +SearchRec.name);
end
else
if DirectoryExists(Dir + Separator + SearchRec.Name) then begin
if (SearchRec.Name <> ".") and (SearchRec.Name <> "..") then begin
GetDirSize(Dir + Separator + SearchRec.Name);
end;
end;
end;
end;
FindClose(SearchRec);
end;
← →
Palladin (2004-02-23 01:05) [1]А что эксплорер или FAR за меньшее время справляются?
← →
Palladin (2004-02-23 01:08) [2]Кстати TSearchRec уже содержит информацию о размере файла и вызов GetFileSize абсолютно лишний.
← →
Gero (2004-02-23 01:14) [3]И проверка if FileExists тоже лишняя...
← →
Anatoly Podgoretsky (2004-02-23 07:49) [4]И DirectoryExists тоже лишнее и вот если эти три штуки выкинешь с небольшими переделками алгоритма, то скорость возрастет неимоверно.
← →
Status (2004-02-23 12:45) [5]Спасибо, всё получилось, теперь почти мгновенно определяет 500 МБ :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c