Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   Wieviel Speicherplatz belegt eine Datei HDD (FAT16/32) (https://www.delphipraxis.net/58166-wieviel-speicherplatz-belegt-eine-datei-hdd-fat16-32-a.html)

TUX_der_Pinguin 2. Dez 2005 10:50


Wieviel Speicherplatz belegt eine Datei HDD (FAT16/32)
 
Hi,

es ist ja bekannt das es einen unterschied zwischen der Dateigröße
einer Datei und dem tatsächlich belegten Speicherplatz auf der Festplatte
gibt. Jetzt meine Frage wie errechne ich diesen Speicherplatz den
meine Datei auf der Festplatte benötigt. Mir ist schon klar das es
auf das FileSystem ankommt, es geht um FAT (16/32) und entsprechender
Cluster größe.

Gibt es da irgendwie eine einfache Formel wo ich anhand der Dateigröße
und Clustergröße den benötigten Speicherplatz ermitteln kann?

mfg

TUX

Daniel Schuhmann 2. Dez 2005 11:57

Re: Wieviel Speicherplatz belegt eine Datei HDD (FAT16/32)
 
Ganz einfach:

Erstmal mußt Du die Größe einer Zuordnungseinheit herausfinden. Diese ist unterschiedlich und variiert je nach Dateisystem und Plattengröße. Bei FAT12 auf einer Diskette ist sie 512 Bytes, bei großen FAT16-Partitionen ist sie auch mal 64 KB groß.
In unserem Beispiel ist die Größe 4096 Bytes.

Nehmen wir an, Du hast eine Datei, die 18944 Bytes groß ist:

Du teilst die 18944 durch die Zuordnungseinheitsgröße, rundest auf die nächste ganze Zahl und multiplizierst diese mit der Zuordnungseinheitsgröße.

18944 / 4096 = 4,625
4096 * 5 = 20480

Die Datei belegt also 20480 Bytes.

Kurios kann die Angabe werden, wenn die Datei mit dem NTFS-Dateisystem komprimiert ist, dann wird die tatsächliche Größe auf dem Datenträger kleiner als die Dateigröße.

Daniel

ichbins 2. Dez 2005 12:31

Re: Wieviel Speicherplatz belegt eine Datei HDD (FAT16/32)
 
Probiers mal damit:

Delphi-Quellcode:
function GetFileSize(const FileName: string): LongInt;
var
  SearchRec: TSearchRec;
begin
  try
    if FindFirst(ExpandFileName(FileName), faAnyFile, SearchRec) = 0 then
      Result := SearchRec.Size
    else Result := -1;
  finally
    SysUtils.FindClose(SearchRec);
  end;
end;

RavenIV 2. Dez 2005 12:33

Re: Wieviel Speicherplatz belegt eine Datei HDD (FAT16/32)
 
interessant ist es bei *wirklich* grossen festplatten mit einem ungünstigen Filesystem.
Da kann eine Datei mit eigentlich nur ein paar kB schon mal einige Megabyte in Anspruch nehmen...

Daniel Schuhmann 2. Dez 2005 13:56

Re: Wieviel Speicherplatz belegt eine Datei HDD (FAT16/32)
 
@IchBins: Damit kriegst Du aber nur die Dateigröße raus, nicht den Platz, der auf der Platte benötigt wird.

@RavenIV: Zuordnungseinheiten größer als 64 KB sollte es eigentlich nicht geben, bei FAT16 ist doch bei 2 GB Schluß (unter Windows NT kriegt man noch 4 GB hin, da wären es 128 KB), bei FAT32 und NTFS sind die Zuordnungseinheiten ohnehin kleiner. Gerade ausprobiert: Selbst bei einer 1 TB-Partition mit NTFS sind die Zuordnungseinheiten noch 4 KB groß (bei Windows NT 3.5x maximal 64 KB. Bei FAT32 beträgt die maximale Clustergröße 32 KB bei einer Plattengröße von 8 TB.

Bei vielen winzigkleinen Dateien mit wenigen Bytes kommen da aber schnell einige Megabytes zusammen. Schönen Kandidaten dafür sind beispielsweise die Favoriten beim Internet Explorer.

Daniel

Sharky 3. Dez 2005 06:38

Re: Wieviel Speicherplatz belegt eine Datei HDD (FAT16/32)
 
Hai TUX,

Du kannst dir ja auch einfach einmal diesen Code aus der Code-Library ansehen. Der berücksichtigt eigentlich alles was notwendig ist.

DevilsCamp 3. Dez 2005 07:50

Re: Wieviel Speicherplatz belegt eine Datei HDD (FAT16/32)
 
Zitat:

Zitat von Daniel Schuhmann
Kurios kann die Angabe werden, wenn die Datei mit dem NTFS-Dateisystem komprimiert ist, dann wird die tatsächliche Größe auf dem Datenträger kleiner als die Dateigröße.

Daniel

Das aber nur, wenn man die Datei per Dateisystem komprimieren läßt.

TUX_der_Pinguin 5. Dez 2005 07:21

Re: Wieviel Speicherplatz belegt eine Datei HDD (FAT16/32)
 
Hi,

vielen Dank für die vielen Antworten, ich werde das ganze mal austesten,
ich denke ich komme jetzt damit zurecht ;-)

mfg

TUX

TUX_der_Pinguin 5. Dez 2005 08:21

Re: Wieviel Speicherplatz belegt eine Datei HDD (FAT16/32)
 
Hi,

ich habe mal fix ein kleines Konsolen Prog geschrieben, was mir auf dem
Win98 Rechner entsprechend die Clustergröße anzeigen soll.

Delphi-Quellcode:
program HDD_INFO;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows;

var
  Drive                : String;
  ClusterSize          : Cardinal;
  SectorPerCluster     : Cardinal;
  BytesPerSector       : Cardinal;
  NumberOfFreeClusters : Cardinal;
  TotalNumberOfClusters : Cardinal;

begin
  { TODO -oUser -cConsole Main : Hier Code einfügen }

  If ParamStr(1) <> '' Then Begin
    Drive := ParamStr(1);
    If Drive[Length(Drive)] <> '\' Then Drive := Drive+'\';

    GetDiskFreeSpace(PChar(Drive),SectorPerCluster, BytesPerSector, NumberOfFreeClusters, TotalNumberOfClusters);
    ClusterSize := SectorPerCluster * BytesPerSector;

    Writeln(Drive,'Clustergröße: ',ClusterSize);
  End;{if}

end.

Alles Funktioniert soweit, jedoch wenn ich mir die Clustergröße von
Partition C: anzeigen lassen will ( FAT32 ) sagt er mit die Clustergröße
sei 32K ?! Obwohl diese doch bei nur 16K liegt, habe eine Datei angelegt
mit 1Byte größe und es wird nur 16K belegt.

Bei einem Test mit einer CompactFlash Card wird mir korrekt 4096Byte Clustergröße angezeigt, bei einer Diskette 512K.

Versteh nicht so richtig was das soll, ach ja SectorPerCluster sind 64
und BytesPerSector sind 512, wird mir bei der FAT32 Partition angezeigt.

Klar das er dann auf 32K kommt, nur wieso ?!

mfg

TUX


p.s. Konsolen-Programm erstellt in Delphi 7

Daniel Schuhmann 5. Dez 2005 08:45

Re: Wieviel Speicherplatz belegt eine Datei HDD (FAT16/32)
 
Ich habs eben mal unter Windows XP mit FAT12 (Diskette, 512 Bytes), FAT32 (20GB-Partition, 16KB) und NTFS (Partitionen 5 GB, 10 GB und 20 GB, je 4 KB) ausprobiert, und mit den Werten von Chkdsk verglichen, da läuft es einwandfrei.

Kompiliert hab ich mit Delphi 7 Personal und Delphi 2005 Personal.

Vielleicht irgendeine Besonderheit von Windows 98?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr.
Seite 1 von 2  1 2      

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