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

Вниз

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

 
Dim!S   (2002-09-13 13:09) [0]

Уважаемые мастера, подскажите, пожалуйста, как подсчитать размер папки вместе с вложенными подпапками и файлами.
Спасибо.


 
Слесарь Матерящийся   (2002-09-13 13:13) [1]

Рекурсивно перечислить файлы в папках, для каждого узнать длину и просуммировать в общей переменной.


 
Dim!S   (2002-09-13 13:22) [2]

А может API-функция какая-нубудь есть...
Спасибо.


 
Слесарь Матерящийся   (2002-09-13 13:32) [3]

Нету.
Вспомните, что делает проводник, когда открываем вкладку свойств для папки со множеством файлов. Цифирки размера бегут!
Это файлы перечисляются...


 
VAleksey ©   (2002-09-13 13:37) [4]

Вроде
GetFileAttributesEx
должна это делать.
Описание в файле Win32.hlp.


 
Рыжик ©   (2002-09-13 13:46) [5]


> VAleksey © (13.09.02 13:37)

про GetFileAttributesEx:

nFileSizeHigh
Specifies the high-order DWORD of the file size. This member has no meaning for directories.
nFileSizeLow
Specifies the low-order DWORD of the file size. This member has no meaning for directories.

То есть для дирректорий она размер не определит


 
Dim!S   (2002-09-13 14:05) [6]

Спасибо, убедили, приступаю...


 
Dimka Maslov ©   (2002-09-13 17:42) [7]

http://delphibase.endimus.com/?action=viewfunc&topic=fileops&id=10316


 
alena.svt ©   (2002-09-13 19:13) [8]

To Dimka Maslov © (13.09.02 17:42)
А я вот такой предлагала уже

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private

{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
CurPath,
CurDir,
DispSize,
DispName: string;
FSize, Size: Double;
ActualSize,Folder: string;
implementation

{$R *.DFM}
function GetSize: double;

function ComputeFolderSize(ADir: String): Double;
var
hFnd: THandle;
Fnd: TWin32FindData;
Temp: integer;
FDir,FName: string;
begin
Result := 0;
if Length(ADir) <> 0 then
begin
if ADir[Length(ADir)] <> "\" then
ADir := ADir + "\";
FDir := ADir;
end
else
Exit;
hFnd := FindFirstFile(PChar(FDir + "*.*"),Fnd);
if hFnd <> INVALID_HANDLE_VALUE then
begin
try
repeat
FName := Trim(StrPas(Fnd.cFileName));
if (FName <> ".") and (FName <> "..") then
begin
if (Fnd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <>
FILE_ATTRIBUTE_DIRECTORY then
begin
Temp := (Fnd.nFileSizeHigh * MAXDWORD) + Fnd.nFileSizeLow;
Result := Result + Temp;
end
else
Result := Result + ComputeFolderSize(FDir + FName);
end;
until not FindNextFile(hFnd,Fnd);
finally
Windows.FindClose(hFnd);
end;
end;
end;

begin
//Размер диска например CurPath :="C:\"; покажет неправильно,
// а папка у меня во всяком случае до байта правильно.
// Если Delphi3 то ExcludeTrailingBackSlash убрать, но тогда ручками убирите завершающий слэш
CurPath := ExcludeTrailingBackSlash(ExtractFilePath(Application.ExeName));
CurDir := ExtractFileName(CurPath);
FSize := ComputeFolderSize(CurPath);
DispName := Folder + CurDir;
Result := FSize;
//Это доработайте до байт килобайт мегобайт как вам угодно
ActualSize := Format("%0.0n Bytes",[FSize]);
if (FSize > 0) and (FSize < 1024) then
Size := 1.0
else
Size := FSize / 1024;
if Size <= 99999 then
DispSize := Format("%.2n KB",[Size])
else
DispSize := Format("%.2n MB",[Size/1024]);

end;
// В событии для кнопки
procedure TForm1.Button1Click(Sender: TObject);
begin
Screen.Cursor:=crHourglass;
GetSize;

Label1.Caption:= ("Размер папки ""+dispName+"" c поддерикториями"+#13+ActualSize+#13+"(" + DispSize + " )");

Screen.Cursor:=crArrow;
end;

end.

Но ваш помойму лучше.
С уважением



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

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

Наверх




Память: 0.49 MB
Время: 0.013 c
1-85604
Schummi
2002-09-14 08:26
2002.09.26
TListView медленно выводит данные!


1-85423
deleon
2002-09-13 09:27
2002.09.26
Как в программе написать проверку целостности ее кода?


1-85507
Pavel_s
2002-09-17 09:31
2002.09.26
TListView


14-85674
NetBreaker666
2002-09-01 19:38
2002.09.26
Было ли вооще рандеву в Питере ???


14-85700
NetBreaker666
2002-09-02 21:58
2002.09.26
А есть ли какие-нибудь официальные сертификаты для программеров.