AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Größe einer Datei bestimmen

Ein Thema von hummer · begonnen am 21. Jan 2004 · letzter Beitrag vom 13. Okt 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von hummer
hummer

Registriert seit: 27. Mai 2003
Ort: Hattingen
437 Beiträge
 
Delphi 7 Enterprise
 
#1

Größe einer Datei bestimmen

  Alt 21. Jan 2004, 19:07
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.
Manuel
unser Infolehrer -> Wissen ist Macht. Wir wissen nichts. Macht nichts.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Größe einer Datei bestimmen

  Alt 21. Jan 2004, 19:09
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;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: Re: Größe einer Datei bestimmen

  Alt 13. Okt 2012, 02:08
Sorry, aber ich hab da eine Kleinigkeit entdeckt.

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.

Geändert von Popov (13. Okt 2012 um 04:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: Re: Größe einer Datei bestimmen

  Alt 13. Okt 2012, 02:48
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!
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.342 Beiträge
 
Delphi 12 Athens
 
#5

AW: Re: Größe einer Datei bestimmen

  Alt 13. Okt 2012, 03:25
Delphi-Quellcode:
Result := (Int64(wfd.nFileSizeHigh) shl 32) or wfd.nFileSizeLow;

// oder

Int64Rec(Result).Lo := wfd.nFileSizeLow;
Int64Rec(Result).Hi := wfd.nFileSizeHigh;
Und nein, das mit MAXDWORD funktioniert auch ... also wenn man es richtig macht.
Result := (Int64(wfd.nFileSizeHigh) * (Int64(MAXDWORD) + 1)) + Int64(wfd.nFileSizeLow); 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.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (13. Okt 2012 um 03:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#6

Re: Größe einer Datei bestimmen

  Alt 21. Jan 2004, 19:11
Hi!

Dazu sagt die Hilfe:


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
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Größe einer Datei bestimmen

  Alt 21. Jan 2004, 19:14
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!
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#8

AW: Re: Größe einer Datei bestimmen

  Alt 13. Okt 2012, 07:43
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!
Ach was.
Delphi-Quellcode:
Function TheSizeOf (aFileName : String) : Integer;
Var
 f : File Of Byte;

begin
  AssignFile(f,aFileName);
  ReSet(f);
  MyFileSize := FileSize(F);
  closefile(F);
End;
funktioniert. (Bis 2GB?)

Mir ist neu, das das vom Inhalt abhängt. Die OH besagt übrigens, das 'F' nicht vom Typ 'Textfile' sein darf/kann.
Also Merkregel: Hilfe immer ganz lesen
Yo, und anzweifeln. Immer anzweifeln und selber probieren.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.342 Beiträge
 
Delphi 12 Athens
 
#9

AW: Größe einer Datei bestimmen

  Alt 13. Okt 2012, 10:22
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.
- Und sogar bei den neuen Funktionen der Delphi-Referenz durchsuchenIOUtils.TFile hat man das total vergessen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#10

Re: Größe einer Datei bestimmen

  Alt 21. Jan 2004, 19:19
Hi!

Das lag daran, dass ich den Rest nicht gelesen hatte

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: Hilfe immer ganz lesen


Ciao fkerber
Frederic Kerber
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:49 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