Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Размер папки [D6, D7]


frost ©   (2003-11-27 20:48:00) 

Как максимально быстроузнать размер папки и количество файлов в нем?


Anatoly Podgoretsky   (2003-11-29 10:04:00) [1]

Значит это размер содержимого папки, без размера самой папки. Этот расзмер естественно также не вклюяает размеры других папок. Тогда стандартный рекурсивный подсчет размеров файлов, через всеми любимый FindXXXX
К коду единственное замечание, ресурсы надо освобождать, только тогда когда они выделены.


Anatoly Podgoretsky   (2003-11-29 10:02:00) [2]

Значит это размер содержимого папки, без размера самой папки. Этот расзмер естественно также не вклюяает размеры других папок. Тогда стандартный рекурсивный подсчет размеров файлов, через всеми любимый FindXXXX
К коду единственное замечание, ресурсы надо освобождать, только тогда когда они выделены.


frost   (2003-11-29 09:14:00) [3]

Для Anatoly Podgoretsky - размер папки код от DVM, что то подобное и у меня, но может кто то знает как можно еще быстрее,
для меня скорость определения в данном случае очень кретична.
Спасибо.


DVM   (2003-11-28 16:34:00) [4]

function GetDirectorySize(const Path: string): Int64;
var
FD : TWin32FindData;
FH : THandle;
TempSize: TULargeInteger;
begin
Result := 0;
if Path="" then exit;
if not(DirExists(Path)) then exit;
FH := FindFirstFile( PChar( Path + "*.*" ), FD );
repeat
if (FH<>INVALID_HANDLE_VALUE) and (FD.cFileName <> string(".")) and
(FD.cFileName<>string("..")) then
begin
if (FILE_ATTRIBUTE_DIRECTORY and FD.dwFileAttributes) <> 0 then
Inc(Result, GetDirectorySize(Path + FD.cFileName + "\"))
else
begin
TempSize.LowPart := FD.nFileSizeLow;
TempSize.HighPart := FD.nFileSizeHigh;
Inc(Result, TempSize.QuadPart);
end;
end;
until FindNextFile(FH,FD) = false;
FindClose(FH);
end;


pasha_golub   (2003-11-28 11:00:00) [5]

Рекурсивно считать, другого пути я не вижу, если под размером папки понимается размер ее содержимого, плюс, если задача требует вычислить кол-во файлов, то все, по другому никак.

ЗЫ Лучше запускать в отдельном потоке, потому как папка Windows, например, считается не быстро. У меня такого плана поток есть, чуть-чуть подправить надо под эту задачу. Мыльте, если чего


Anatoly Podgoretsky   (2003-11-28 09:05:00) [6]

А что есть размер папки?


frost   (2003-11-28 08:49:00) [7]

Разве ShGetFileInfo позволяет получить размер папки(Delphi под рукой нет) ?


Diamond Cat   (2003-11-27 23:20:00) [8]

создавать файл с информацией об этой папке, соответственно нужно вешать прогу отслеживающую изменения в этой папке
(каков вопрос таков ответ)


DVM   (2003-11-27 21:20:00) [9]

ShGetFileInfo()


Наверх

Титульная страница Поиск, карта сайта Написать письмо