![]() |
Dateigröße ohne Öffnen der Datei berechnen
Hi,
ich möchte von allen Dateien die Dateigröße anzeigen lassen können. Bisher tat es immer diese Funktion:
Delphi-Quellcode:
Wenn ich allerdings die Größe meiner Auslagerungsdatei haben möchte, kriege ich wegen dem FileStream sofort eine Zugriffsverletzung, da man nicht die Berechtigung hat, diese Datei zu öffnen. Wie könnte man dennoch die größe bestimmen ?
function GetFileSize(const FileName : String): Int64;
var FileStream: TFileStream; begin FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone); try try Result := FileStream.Size; except Result := 0; end; finally FileStream.Free; end; end; |
Re: Dateigröße ohne Öffnen der Datei berechnen
|
Re: Dateigröße ohne Öffnen der Datei berechnen
Edit: zu langsam...
|
Re: Dateigröße ohne Öffnen der Datei berechnen
Der gute Wille zählt auch.
|
Re: Dateigröße ohne Öffnen der Datei berechnen
Habe ich doch tatsächlich übersehen....
Delphi-Quellcode:
Rufe ich die wie oben auf, bloß dass ich anstelle von PWideChar einfach PChar nehme ?
function GetFileSize(szFile : PChar) : Int64;
var fFile : THandle; wfd : TWIN32FINDDATA; begin Result := -1; fFile := FindFirstfile(PChar(szFile), wfd); if fFile = INVALID_HANDLE_VALUE then Exit; Result := (wfd.nFileSizeHigh * (Int64(MAXDWORD) + 1)) + wfd.nFileSizeLow; Windows.FindClose(fFile); end;
Delphi-Quellcode:
TreeData.fGroesse := BytesToStr(GetFileSize(PChar(Msg.LParam)));
|
Re: Dateigröße ohne Öffnen der Datei berechnen
Das ist jetzt vielleicht eine blöde Frage, aber was spricht eigentlich gegen
![]() |
Re: Dateigröße ohne Öffnen der Datei berechnen
Nichts, habe bloß nicht dran gedacht.
Delphi-Quellcode:
Das ergibt bei mir allerdings - genauso wie bei Luckies Funktion - den vorgesetzten Ergebniswert (in dem Fall 0).
function GetFileSize(f : PAnsiChar) : Int64;
var FI : TWin32FileAttributeData; begin Result := 0; if GetFileAttributesEx(f, GetFileExInfoStandard, @FI) then Result := FI.nFileSizeHigh; end; Merkwürdiger Weise habe ich immer den Laufwerksbuchstaben "E" als Eingabe-PAnsiChar, es wundert mich, wie das mit der alten Funktion funktionieren konnte. Nachtrag: Es liegt am AnsiChar, es MUSS WideChar benutzt werden, sonst gibt es Salat.... |
Re: Dateigröße ohne Öffnen der Datei berechnen
Naja, dass in nFileSizeHigh 0 steht, finde ich nicht direkt überraschend, wenn die Datei nicht gerade größer als 4GB ist. Vielleicht mal (sinngemäß)
Delphi-Quellcode:
probieren? :)
(nFileSizeHigh shl 32) or nFileSizeLow
Übrigens ist mir aufgefallen, dass im Online-MSDN die Mindestanforderung Windows 2000 ist, laut Windows Vista SDK jedoch Windows 98/NT4. Wie unangenehm, dass da auch langsam der Support für die alten Windows-Versionen endet. Ich fand es eigentlich immer ganz angenehm, zu wissen, ob mein Programm theoretisch auch unter Windows 98 laufen würde. Edit @Nachtrag: Müsstest du nicht auch GetFileAttributesExA benutzen können? |
Re: Dateigröße ohne Öffnen der Datei berechnen
Ah, das funzt endlich fast überall, danke. Die Pagefile.sys ist mommentan bei 0 Bytes kann man das noch verbessern ? Man kann GetFileAttributesExA benutzen. Dass die Abwärtskompatibilität immer mehr abnimmt, ist wirklich schade.
|
Re: Dateigröße ohne Öffnen der Datei berechnen
Zeigen die anderen geposteten Funktionen für diese Datei denn auch 0 an? Wie groß ist die Datei denn? Nicht, dass sie zufällig 4GB groß ist und deshalb nFileSizeLow 0 ist und nFileSizeHigh 1 und da nur was beim Casten/Shiften schiefgelaufen ist *g*
@Roter Kasten bzgl. Abwärtskompatibilität: Sie nimmt ja nicht ab in dem Sinne, sondern sie wird nicht mehr dokumentiert. Bisher fand man im Windows SDK die Angaben teilweise bis vor Windows 98/NT4 runter. Aber die sind ja nicht mehr offiziell. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz