Главная страница
    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.005 c
15-1262522391
И. Павел
2010-01-03 15:39
2010.03.21
PHP - не хватает прав для выполнения fopen


2-1263898004
виктор
2010-01-19 13:46
2010.03.21
Как изменить свойство группы компонентов?


2-1263609315
Делфиец
2010-01-16 05:35
2010.03.21
Есть ли метод оперделения какой контрол в фокусе


6-1214555457
Галинка
2008-06-27 12:30
2010.03.21
сокеты и ip


15-1262338995
dr_creigan
2010-01-01 12:43
2010.03.21
Ядра процессоров





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский