Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dateigröße in Byte auslesen (https://www.delphipraxis.net/192609-dateigroesse-byte-auslesen.html)

MrDelock123 4. Mai 2017 14:22

Delphi-Version: XE3

Dateigröße in Byte auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

wie kann ich die Größe einer Datei auf dem Datenträger auslesen? Bisher kann ich nur die "normale" Größe ermittlen:

Code:
function GetFileSize(const AFileName: string): Int64;
var
  F: TSearchRec;
begin
  Result := -1;
  if FindFirst(AFileName, faAnyFile, F) = 0 then
  begin
    Result := F.FindData.nFileSizeLow or (F.FindData.nFileSizeHigh shl 32);
  end;
end;
Allerdings brauche ich die Größe, die unter Windows als "Größe auf Datenträger" angezeigt wird.

Danke im voraus.

p80286 4. Mai 2017 14:37

AW: Dateigröße in Byte auslesen
 
Delphi-Quellcode:
if (meinwert mod clustergröße)>0 then
    plattenplatz:=((meinwert div clustergröße)+1)*clustergröße
  else
    plattenplatz:=(meinwert div clustergröße)*clustergröße;
Das sollte es sein (keine Gewähr für Tippfehler)

Gruß
K-H

nahpets 4. Mai 2017 14:38

AW: Dateigröße in Byte auslesen
 
Das müsste grob
Delphi-Quellcode:
(GetFileSize(Dateiname) div (Clustergrößer der Festplatte) + 1) * (Clustergrößer der Festplatte)
sein.

Oder hier mal schauen: http://www.delphipages.com/forum/sho...d.php?t=191073

himitsu 4. Mai 2017 14:46

AW: Dateigröße in Byte auslesen
 
An Alle, die jetzt manuell mit Clustern rechnen ... vergesst es!
* "kleine" Dateien liegen im NTFS als Atribut direkt in der MFT und nicht in einem eigenem Cluster
* SparseFiles? Da wo Cluster weggelassen und nicht im dateiSystem liegen.
* NTFS-komprimierte Daeien?
* usw.

http://stackoverflow.com/questions/3...f-file-on-disk

GetCompressedFileSize und den Rest ignorieren.


FindFirst?
Warum gibst du den Speicher/Suchergebnis nicht wieder frei?

Zitat:

Delphi-Quellcode:
Result := F.FindData.nFileSizeLow or (F.FindData.nFileSizeHigh shl 32);

Über 4 GB stimmt das nicht, denn wo werden wohl die zuvielen Bits hingeschoben, in einem 32-Bit-Integer?
Ins NICHTS!
Delphi-Quellcode:
Result := F.FindData.nFileSizeLow or (Int64(F.FindData.nFileSizeHigh) shl 32);


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:50 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