Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.05;
Скачать: CL | DM;

Вниз

Быстро получить размер каталога   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
14-12513
VEG
2004-02-06 21:01
2004.03.05
Вопрос по синтаксису С++ - конветирование


3-12289
Relaxxx
2004-02-06 19:23
2004.03.05
Нужен совет, у меня есть таблица, которая формируется...


11-12301
Alexeyss
2003-06-22 04:57
2004.03.05
Проблемма совместимости с ХР


4-12584
LOX
2003-12-30 13:51
2004.03.05
Сохранить текст из ListBox на чужой форме


1-12403
TButton
2004-02-24 17:49
2004.03.05
TToolBar