![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Размер большой папки
Alexey © (2010-01-18 15:55:00)Добрый день!
Для подсчета размера папки я использую след. функцию:
function DirSize(Dir: string): longint;
var
SearchRec : TSearchRec;
begin
result:=0;
if FindFirst(Dir+'\*.*', faAnyFile, SearchRec) = 0 then
try
repeat
if (SearchRec.Attr and faDirectory = faDirectory) then begin
if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
inc(result, DirSize(Dir + '\' + SearchRec.Name))
end
else
inc(result, SearchRec.Size);
until FindNext(SearchRec) <> 0;
finally
FindClose(SearchRec);
end;
end;
но в этом коде есть 2 главные проблемы:
1. Результат в байтах, соответственно размер больших папок какого типа должен быть?
2. Размер больших папок очень долго считается.
Подскажите, пожалуйста, как быть?
Спасибо!
Alexey (2010-01-18 18:17:00) [1]
> > Правая кнопка мыши -> Свойства -> вкладка "Общие"
>
> учитывает:
>
> > http://transl-gunsmoker.blogspot.com/2009/12/blog-post_28.
>
> > html
>
> ?
>
А хз, мне таких данных было бы достаточно
DVM (2010-01-18 18:08:00) [2]
> Правая кнопка мыши -> Свойства -> вкладка "Общие"
учитывает:
> http://transl-gunsmoker.blogspot.com/2009/12/blog-post_28.
> html
?
Alexey (2010-01-18 18:03:00) [3]DVM:
Все, работает)
Alexey (2010-01-18 18:02:00) [4]Jeer:
Правая кнопка мыши -> Свойства -> вкладка "Общие"
Игорь Шевченко (2010-01-18 18:01:00) [5]
> Цель одна - просто узнать размер папки чтобы предоставить
> его пользователю
http://transl-gunsmoker.blogspot.com/2009/12/blog-post_28.html
DVM (2010-01-18 18:01:00) [6]
> Alexey (18.01.10 17:36) [4]
> DVM:
> Если честно, ваш метод вообще у меня не работает
на конце пути слеш надо, ну или код поправь чтобы там было IncludeTrailingBackslash
GetDirectorySize('d:\downloads\')
Jeer (2010-01-18 17:37:00) [7]
> просто узнать размер папки
И что есть "размер папки" ?
Alexey (2010-01-18 17:36:00) [8]DVM:
Если честно, ваш метод вообще у меня не работает
Alexey (2010-01-18 17:32:00) [9]Цель одна - просто узнать размер папки чтобы предоставить его пользователю
Игорь Шевченко (2010-01-18 17:03:00) [10]оба метода неверные, так как не учитывают цели, для которой надо считать
DVM (2010-01-18 15:58:00) [11]
> 1. Результат в байтах, соответственно размер больших папок
> какого типа должен быть?
int64
> 2. Размер больших папок очень долго считается.
ну а что ты хотел
function GetDirectorySize(const Path: string): Int64;
var
FD : TWin32FindData;
FH : THandle;
TempSize: TULargeInteger;
begin
Result := 0;
if Path = '' then exit;
if not(DirectoryExists(Path)) then exit;
FH := Windows.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 Windows.FindNextFile(FH, FD) = false;
if FH <> 0 then Windows.FindClose(FH);
end;