Форум: "Основная";
Текущий архив: 2002.09.12;
Скачать: [xml.tar.bz2];
ВнизFindFirst((ExtractFilePath(Application.... МАСТЕРА! помогите с ра Найти похожие ветки
← →
jcrush (2002-09-01 18:41) [0]FindFirst((ExtractFilePath(Application.ExeName)+"basa.jch"), faAnyFile, SearchRec);
Label1.Caption := IntToStr(SearchRec.Size) + " байт занято";
^^^^
показывает размер одного файла, надо чтобы в данном каталоге, где программа, показывало размеры всех файлов сразу, можно конечно это сложить по имени каждого файла, но это нудно.
← →
Anatoly Podgoretsky (2002-09-01 18:56) [1]Так это цикл, конструкция такая есть в Паскале while условие do
← →
Song (2002-09-01 19:17) [2]К сожалению только сложением.
← →
Юрий Зотов (2002-09-01 19:39) [3]> показывает размер одного файла,
FindFirst - "найти ПЕРВЫЙ ". Что и имеем.
> показывало размеры всех файлов сразу
try
repeat
...
until FindNext(...) <> 0
finally
FindClose(...)
end
> можно конечно это сложить по имени каждого файла, но это нудно
Да. Общение с компьютером, да еще на ЕГО языке - нудная вещь. Но что делать... Ведь мы живем всего лишь в XXI веке.
← →
alena.svt (2002-09-01 20:19) [4]Если надо именно всех то почему б не получить рамер самой папки?
← →
alena.svt (2002-09-01 21:53) [5]
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.
Лишнее выкинете.
С уважением
← →
Song (2002-09-01 21:56) [6]2alena.svt © (01.09.02 21:53)
А это типа у Вас работает не сложением?
← →
alena.svt (2002-09-01 22:15) [7]Да сложением я не спорю.
Просто самой интересно стало когда посоветовала размер папки получить
По-другому не смогла. Но просто поделилась может кому пригодиться.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c