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

Вниз

Размер большой папки   Найти похожие ветки 

 
Alexey   (2010-01-18 15:55) [0]

Добрый день!

Для подсчета размера папки я использую след. функцию:


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. Размер больших папок очень долго считается.

Подскажите, пожалуйста, как быть?

Спасибо!


 
DVM ©   (2010-01-18 15:58) [1]


> 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;


 
Игорь Шевченко ©   (2010-01-18 17:03) [2]

оба метода неверные, так как не учитывают цели, для которой надо считать


 
Alexey   (2010-01-18 17:32) [3]

Цель одна - просто узнать размер папки чтобы предоставить его пользователю


 
Alexey   (2010-01-18 17:36) [4]

DVM:
Если честно, ваш метод вообще у меня не работает


 
Jeer ©   (2010-01-18 17:37) [5]


> просто узнать размер папки


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


 
Игорь Шевченко ©   (2010-01-18 18:01) [6]


> Цель одна - просто узнать размер папки чтобы предоставить
> его пользователю


http://transl-gunsmoker.blogspot.com/2009/12/blog-post_28.html


 
DVM ©   (2010-01-18 18:01) [7]


> Alexey   (18.01.10 17:36) [4]
> DVM:
> Если честно, ваш метод вообще у меня не работает

на конце пути слеш надо, ну или код поправь чтобы там было IncludeTrailingBackslash

GetDirectorySize("d:\downloads\")


 
Alexey   (2010-01-18 18:02) [8]

Jeer:

Правая кнопка мыши -> Свойства -> вкладка "Общие"


 
Alexey   (2010-01-18 18:03) [9]

DVM:
Все, работает)


 
DVM ©   (2010-01-18 18:08) [10]


> Правая кнопка мыши -> Свойства -> вкладка "Общие"

учитывает:

> http://transl-gunsmoker.blogspot.com/2009/12/blog-post_28.
> html

?


 
Alexey   (2010-01-18 18:17) [11]


> > Правая кнопка мыши -> Свойства -> вкладка "Общие"
>
> учитывает:
>
> > http://transl-gunsmoker.blogspot.com/2009/12/blog-post_28.
>
> > html
>
> ?
>


А хз, мне таких данных было бы достаточно



Страницы: 1 вся ветка

Текущий архив: 2010.03.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
6-1214898330
OberonAR
2008-07-01 11:45
2010.03.21
WebBrowser и загрузка файла


1-1243761846
Dr.Andrew
2009-05-31 13:24
2010.03.21
Как упростить конструкцию Smallint(Pointer(@apeaks[i, 0])^) ?


15-1262617930
Копир
2010-01-04 18:12
2010.03.21
Delphi


15-1262069352
БарЛог
2009-12-29 09:49
2010.03.21
пример.испытание


1-1243255012
TStas
2009-05-25 16:36
2010.03.21
Как удалить файл в корзину?