Вниз
Скачать: 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 вся ветка

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



Память: 0.46 MB
Время: 0.009 c
7-12559
Sabor
2003-12-16 09:40
2004.03.05
messsage


4-12577
unnamed777
2003-12-27 05:29
2004.03.05
Прерывание сообщения


14-12488
4i
2004-02-13 16:43
2004.03.05
Алгоритмы


9-12223
lokid7
2003-08-18 13:08
2004.03.05
Скелетная анимация


1-12407
EthernalWonderer
2004-02-21 10:35
2004.03.05
на что указывает указатель




   Наверх