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

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

размер каталога вместе с содержимым


SpyBoy ©   (2005-08-22 12:54:00) 

Для того, чтобы узнать размер каталога вместе с содержимым, использую конструкцию
procedure GetDirSize(const aPath: string; var SizeDir: Int64);
var
 SR: TSearchRec;
 tPath: string;
begin
 tPath := IncludeTrailingBackSlash(aPath);
 if FindFirst(tPath + '*.*', faAnyFile, SR) = 0 then
 begin
   try
     repeat
       if (SR.Name = '.') or (SR.Name = '..') then
         Continue;
       if (SR.Attr and faDirectory) <> 0 then
       begin
         GetDirSize(tPath + SR.Name, SizeDir);
         Continue;
       end;
       SizeDir := SizeDir +
         (SR.FindData.nFileSizeHigh shl 32) +
         SR.FindData.nFileSizeLow;
     until FindNext(SR) <> 0;
   finally
     Sysutils.FindClose(SR);
   end;
 end;
end;
Пример использования:

procedure TForm1.Button1Click(Sender: TObject);
var
 SizeDir: Int64;
begin
 SizeDir := 0;
 GetDirSize('c:\winnt', SizeDir);
 ShowMessage('Размер каталога ' + IntToStr(SizeDir));
end;

Однако это так долго!!
Может есть болеее быстрый способ-
аналог правой кнопкой по папке->свойства ?


Юрий Зотов   (2005-08-23 23:25:00) [1]

Там GetFolder. И Size - уже строка.

procedure TForm1.Button1Click(Sender: TObject);
var
 FSObject, Folder: OleVariant;
begin
 FSObject := CreateOleObject('Scripting.FileSystemObject');
 Folder := FSObject.GetFolder('C:\WinNT');
 ShowMessage(Folder.Size)
end;


SpyBoy   (2005-08-23 23:00:00) [2]

begin...end ©   (22.08.05 14:05) [1]

НЕ работает однако:(((((((((
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EOleError with message 'Method 'GetObject' not supported by automation object'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help  
---------------------------


Anatoly Podgoretsky   (2005-08-22 14:09:00) [3]

SpyBoy ©   (22.08.05 12:54)  
Так правой кнопкой по папке->свойства также очень долго.


begin...end   (2005-08-22 14:05:00) [4]

uses ComObj;

var
 FSObject, Folder: OleVariant;
begin
 FSObject := CreateOleObject('Scripting.FileSystemObject');
 Folder := FSObject.GetObject('C:\WinNT');
 ShowMessage(IntToStr(Folder.Size))
end.


Наверх

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