Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit Dateigrößen-Feststellung bei "kleineren" Dateien (https://www.delphipraxis.net/110762-problem-mit-dateigroessen-feststellung-bei-kleineren-dateien.html)

Helmi 24. Mär 2008 13:21


Problem mit Dateigrößen-Feststellung bei "kleineren&quo
 
Hallo,

ich hab folgende zwei Funktionen um die Größe einer Datei festzustellen:

1. GetFileSize
Delphi-Quellcode:
function GetFileSize(const FileName: String): Int64;
var
  SearchRec: TSearchRec;

begin
  Result := -1;
  If FindFirst(FileName, faAnyFile, SearchRec) = 0 then
  begin
    try
      Result := SearchRec.Size;
    finally
      FindClose(SearchRec);
    end;
  end;
end;
2. FileSize
Delphi-Quellcode:
AssignFile(FromF, OpenDialog1.FileName);
FileMode   := fmOpenread;
reset(FromF);
Label2.Caption := IntToStr(FileSize(FromF));
Nun hab ich diese zwei Funktionen verglichen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  FromF: file of byte;

begin
  If OpenDialog1.Execute then
    begin
      Label1.Caption := IntToStr(GetFileSize(OpenDialog1.FileName));

      AssignFile(FromF, OpenDialog1.FileName);
      FileMode   := fmOpenread;
      reset(FromF);
      Label2.Caption := IntToStr(FileSize(FromF));
    end;
end;
Ich hab eine Datei die ist 5,12 GB (5.501.142.528 Bytes) groß.
Bei dieser wird mir in beiden Labels ein Wert von
1206175232.

Bei einer anderen Datei die eine Größe von 2,97 GB (3.199.247.872 Bytes).
Bei dieser Datei wird aber in beiden Labels ein Wert
von -1095719424.

Wieso ist bei der kleinen Datei ein Minus davor?

phXql 24. Mär 2008 13:23

Re: Problem mit Dateigrößen-Feststellung bei "kleineren
 
Hört sich nach nem Integer-Overflow an.

Helmi 24. Mär 2008 13:25

Re: Problem mit Dateigrößen-Feststellung bei "kleineren
 
Zitat:

Zitat von phXql
Hört sich nach nem Integer-Overflow an.

Kann ich mir nicht vorstellen. Denn das passiert bei der
kleineren der beiden Dateien. Bei der Größeren wird alles
normal (also positiv) angezeigt.

taaktaak 24. Mär 2008 13:27

Re: Problem mit Dateigrößen-Feststellung bei "kleineren
 
Moin, Moin,
in beiden Fällen reicht der Wertebereich von Integer nicht aus! Auch im ersten Fall liefert SearchRec.Size nur einen Integer zurück, da nutzt das Int64 leider nix

Khabarakh 24. Mär 2008 13:51

Re: Problem mit Dateigrößen-Feststellung bei "kleineren
 
Zitat:

Zitat von Helmi
Bei der Größeren wird alles normal (also positiv) angezeigt.

Da sollte doch ein Blick reichen, um zu erkennen, dass auch die positive Zahl alles andere als "normal" ist :stupid: . 1206175232 Byte sind 1,12 GB, etwas weniger als 5 GB ;) . Addiere einmal 2^32 Byte und staune :mrgreen: .

Und wie man's richtig macht, hast du ja schon längst hier als Antwort bekommen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:07 Uhr.

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