Главная страница
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.013 c
1-12378
Кен
2004-02-20 04:51
2004.03.05
А существует ли такое дерево у которого ветки могли бы ссылаться


7-12547
N169
2003-12-17 10:42
2004.03.05
Как отключить подписывание драйверов?


3-12239
Алексей Петухов
2004-02-10 12:58
2004.03.05
invalid BLOB length


8-12450
_Alex_
2003-11-04 19:42
2004.03.05
проигрывание AVI


1-12442
Relaxxx
2004-02-23 11:33
2004.03.05
Вопрос о работе с датами!