Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Größe einer Datei bestimmen (https://www.delphipraxis.net/15098-groesse-einer-datei-bestimmen.html)

hummer 21. Jan 2004 19:07


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.

Luckie 21. Jan 2004 19:09

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;

fkerber 21. Jan 2004 19:11

Re: Größe einer Datei bestimmen
 
Hi!

Dazu sagt die Hilfe:


Zitat:

Zitat von Hilfe
Delphi-Syntax:

function FileSize(var F): Integer;

Beschreibung

In Delphi können Sie mit FileSize die Größe der angegebenen Datei (F) ermitteln. Die Größe wird als die Anzahl der Datensätze in einer Datensatzdatei ausgedrückt.


Ciao fkerber

Luckie 21. Jan 2004 19:14

Re: Größe einer Datei bestimmen
 
Hm. Und warum verschweigst du ihm den Rest:
Zitat:

Note: FileSize can't be used on a text file.
Oder anders: Deine Antwort würde auf die Frage passen: "Wie viele Datensätze befinden sich in einer typisierten Datei?"

Die größe von binären Dateien kann man so nicht bestimmen!

fkerber 21. Jan 2004 19:19

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

hummer 21. Jan 2004 20:00

Re: Größe einer Datei bestimmen
 
Jo danke es funktioniert. :thuimb:

Luckie 21. Jan 2004 20:02

Re: Größe einer Datei bestimmen
 
Alternativ kannst du die Datei auch in einen Stream laden und die Eigenschaft Size nutzen.

hummer 21. Jan 2004 20:14

Re: Größe einer Datei bestimmen
 
Das ist noch besser, da ich sowieso die Datei als Stream lade und speicher.

Popov 13. Okt 2012 02:08

AW: Re: Größe einer Datei bestimmen
 
Sorry, aber ich hab da eine Kleinigkeit entdeckt.

Zitat:

Zitat von Luckie (Beitrag 109961)
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;

Hier sind evt. zwei Fehler drin. Das gilt auch für die modifizierte Version hier: http://www.delphipraxis.net/24331-da...ermitteln.html

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:
function GetFileSize4(szFile: String): Int64;
..
begin
  ..
  result := (Int64(wfd.nFileSizeHigh)*(MAXDWORD))+Int64(wfd.nFileSizeLow);
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.

//Edit:

Ich sehe gerade, dass in meinem alten API Buch auch nur (MAXDWORD) steht. Der Fehler liegt also eher da.

Aphton 13. Okt 2012 02:48

AW: Re: Größe einer Datei bestimmen
 
Zitat:

Zitat von Popov (Beitrag 1186856)
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.

"paar Byte" = wfd.nFileSizeHigh

Bei 10 * 4 gb gibt er 10 Byte -demnach- weniger zurück.. unverkraftbar!


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:49 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz