Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.03.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.004 c
2-1263804946
Олег1963
2010-01-18 11:55
2010.03.21
RandomRange не компилируется в модуле


2-1263941575
bagos
2010-01-20 01:52
2010.03.21
hex to demical


3-1236243330
ford
2009-03-05 11:55
2010.03.21
проблемма с вычиткой BLOB полей из базы данных


6-1214573401
Галинка
2008-06-27 17:30
2010.03.21
как передать строку в сокет?


2-1264116575
pazitiff
2010-01-22 02:29
2010.03.21
Invalid pointer operation





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский