// Wenn man die
Größe einer Datei ermitteln will, ohne dieselbe zu öffnen,
// könnte man so verfahren:
// Getestet mit D4 unter WinME
function DateiGroesse(datei: string; var gross: longint): boolean;
var
sr: TWin32FindData;
h: THandle;
begin
h := FindFirstFile(PChar(datei), sr);
result := (h <> INVALID_HANDLE_VALUE) and (sr.dwFileAttributes and
FILE_ATTRIBUTE_DIRECTORY = 0);
if result then
gross := (sr.nFileSizeHigh * MAXDWORD) + sr.nFileSizeLow;
windows.FindClose(h);
end;
// Beispielaufruf
procedure TForm1.Button2Click(Sender: TObject);
var
gr: longint;
begin
if DateiGroesse('c:\autogramm.bmp', gr)
then showmessage(inttostr(round(gr / 1024 + 0.5)) + ' KB')
else showmessage('Fehler');
end;
//--------------------------------------------------------------------
// Wenn
Dateigrößen über 2 GB liegen, dann so:
// Getestet mit D4 unter XP
function GetFileSize(const FileName: string; var gross: int64): boolean;
var
h: THandle;
sr: TWin32FindData;
begin
gross := 0;
h := FindFirstFile(PChar(FileName), sr);
result := (h <> INVALID_HANDLE_VALUE) and (sr.dwFileAttributes and
FILE_ATTRIBUTE_DIRECTORY = 0);
if result then begin
Int64Rec(gross).Lo := sr.nFileSizeLow;
Int64Rec(gross).Hi := sr.nFileSizeHigh;
Windows.FindClose(h);
end;
end;
// Beispielaufruf
procedure TForm1.Button2Click(Sender: TObject);
var
gr: int64;
begin
if GetFileSize('c:\hiberfil.sys', gr)
then showmessage(Formatfloat('#,##0 KB', (gr / 1024 + 0.5)))
else showmessage('Fehler');
end;
|