AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Betriebssysteme Wieviel Speicherplatz belegt eine Datei HDD (FAT16/32)
Thema durchsuchen
Ansicht
Themen-Optionen

Wieviel Speicherplatz belegt eine Datei HDD (FAT16/32)

Ein Thema von TUX_der_Pinguin · begonnen am 2. Dez 2005 · letzter Beitrag vom 5. Dez 2005
Antwort Antwort
Seite 1 von 2  1 2      
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#1

Wieviel Speicherplatz belegt eine Datei HDD (FAT16/32)

  Alt 2. Dez 2005, 11:50
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
  Mit Zitat antworten Zitat
Benutzerbild von Daniel Schuhmann
Daniel Schuhmann

Registriert seit: 16. Jul 2005
Ort: München
391 Beiträge
 
Turbo Delphi für Win32
 
#2

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

  Alt 2. Dez 2005, 12:57
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
Daniel Schuhmann
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#3

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

  Alt 2. Dez 2005, 13:31
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;
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#4

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

  Alt 2. Dez 2005, 13:33
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...
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Benutzerbild von Daniel Schuhmann
Daniel Schuhmann

Registriert seit: 16. Jul 2005
Ort: München
391 Beiträge
 
Turbo Delphi für Win32
 
#5

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

  Alt 2. Dez 2005, 14:56
@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
Daniel Schuhmann
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#6

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

  Alt 3. Dez 2005, 07:38
Hai TUX,

Du kannst dir ja auch einfach einmal diesen Code aus der Code-Library ansehen. Der berücksichtigt eigentlich alles was notwendig ist.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#7

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

  Alt 3. Dez 2005, 08:50
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.
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#8

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

  Alt 5. Dez 2005, 08:21
Hi,

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

mfg

TUX
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#9

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

  Alt 5. Dez 2005, 09:21
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
  Mit Zitat antworten Zitat
Benutzerbild von Daniel Schuhmann
Daniel Schuhmann

Registriert seit: 16. Jul 2005
Ort: München
391 Beiträge
 
Turbo Delphi für Win32
 
#10

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

  Alt 5. Dez 2005, 09:45
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?
Daniel Schuhmann
  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 03:32 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