Форум: "Основная";
Текущий архив: 2002.09.26;
Скачать: [xml.tar.bz2];
ВнизРазмер папки Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c