![]() |
Größe einer Datei bestimmen
Hallo.
Ich hab eine Datei file.dat. Ich möchte die Größe der Datei ermitteln und dann in einer Statistik ausgeben. Wie kann ich die Größe einer Datei festellen? Vielen Dank schonmal. |
Re: Größe einer Datei bestimmen
Delphi-Quellcode:
function GetFileSize(szFile: String): Cardinal;
var fFile: THandle; wfd: TWIN32FINDDATA; begin result := 0; if not FileExists(szFile) then exit; fFile := FindFirstfile(pchar(szFile),wfd); if fFile = INVALID_HANDLE_VALUE then exit; result := (wfd.nFileSizeHigh*(MAXDWORD))+wfd.nFileSizeLow; windows.FindClose(fFile); end; |
Re: Größe einer Datei bestimmen
Hi!
Dazu sagt die Hilfe: Zitat:
Ciao fkerber |
Re: Größe einer Datei bestimmen
Hm. Und warum verschweigst du ihm den Rest:
Zitat:
Die größe von binären Dateien kann man so nicht bestimmen! |
Re: Größe einer Datei bestimmen
Hi!
Das lag daran, dass ich den Rest nicht gelesen hatte :oops: :oops: Sorry, war keine Absicht, aber ich dachte das wären nur weitere Erläuterungen. Gudd, dass es Moderatoren gibt, die doch etwas mehr Erfahrung haben. Also Merkregel: :arrow: Hilfe immer ganz lesen :lol: Ciao fkerber |
Re: Größe einer Datei bestimmen
Jo danke es funktioniert. :thuimb:
|
Re: Größe einer Datei bestimmen
Alternativ kannst du die Datei auch in einen Stream laden und die Eigenschaft Size nutzen.
|
Re: Größe einer Datei bestimmen
Das ist noch besser, da ich sowieso die Datei als Stream lade und speicher.
|
AW: Re: Größe einer Datei bestimmen
Sorry, aber ich hab da eine Kleinigkeit entdeckt.
Zitat:
![]() Der erste Punkt ist, dass hier anscheinend besonders große Werte nicht richtig zurück gegeben werden. Meine eigene Funktion hatte übrigens auch den gleichen Größe-Fehler, deshalb begab ich mich auf die Suche. Ich hab eine etwa 6,8 GB Datei geprüft und bekam in beiden Fällen etwa 2,5 GB zurück. Vielleicht gab es 2004 noch nicht so große Dateien um es zu testen. Das Problem könnte evtl. das Problem lösen:
Delphi-Quellcode:
Der zweite Punkt ist evtl. das hier: (MAXDWORD). Laut MS sollte es (MAXDWORD+1) sein. Aber die +1 verkraftet Delphi nicht. Der Fehler ist aber nur paar Byte.
function GetFileSize4(szFile: String): Int64;
.. begin .. result := (Int64(wfd.nFileSizeHigh)*(MAXDWORD))+Int64(wfd.nFileSizeLow); //Edit: Ich sehe gerade, dass in meinem alten API Buch auch nur (MAXDWORD) steht. Der Fehler liegt also eher da. |
AW: Re: Größe einer Datei bestimmen
Zitat:
Bei 10 * 4 gb gibt er 10 Byte -demnach- weniger zurück.. unverkraftbar! |
AW: Re: Größe einer Datei bestimmen
Delphi-Quellcode:
Und nein, das mit MAXDWORD funktioniert auch ... also wenn man es richtig macht. :angle2:
Result := (Int64(wfd.nFileSizeHigh) shl 32) or wfd.nFileSizeLow;
// oder Int64Rec(Result).Lo := wfd.nFileSizeLow; Int64Rec(Result).Hi := wfd.nFileSizeHigh;
Delphi-Quellcode:
Aber wenn man weiß, wie in einem 32-Bit-Delphi die 64-Integeroperationen aufgebaut sind, dann läßt man soeinen Mist wie * (MUL), DIV und MOD.
Result := (Int64(wfd.nFileSizeHigh) * (Int64(MAXDWORD) + 1)) + Int64(wfd.nFileSizeLow);
|
AW: Re: Größe einer Datei bestimmen
Zitat:
Delphi-Quellcode:
funktioniert. (Bis 2GB?)
Function TheSizeOf (aFileName : String) : Integer;
Var f : File Of Byte; begin AssignFile(f,aFileName); ReSet(f); MyFileSize := FileSize(F); closefile(F); End; Mir ist neu, das das vom Inhalt abhängt. Die OH besagt übrigens, das 'F' nicht vom Typ 'Textfile' sein darf/kann. Zitat:
|
AW: Größe einer Datei bestimmen
Nur zum Auslesen der Dateigröße besser nicht über das System.FileSize gehn, denn was mag wohl pasieren, wenn man Zugriffsrechte besitzt oder irgendwer die Datei gerade geöffnet hat?
Was mich aber extrem verwundert: - Bei den Dateifunktionen in der SysUitls hat man tatsächlich die Dateigröße vergessen zu implementieren. :shock: - Und sogar bei den neuen Funktionen der ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:28 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