Thema: Sparse-Datei

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

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

AW: Sparse-Datei

  Alt 30. Jul 2018, 14:23
Wo ist eigentlich das Problem?


Eine Sprase-Datei ist eine Datei mit "Lücken", also wo es Bereiche gibt, denen kein Speicherplatz zugewiesen ist.
Und ja, mit FILE_ATTRIBUTE_SPARSE_FILE kann man Dateien darauf prüfen.
TSearchRec.FindData.dwFileAttributes oder TSearchRec.Attr, wobei es egal ist, ob mit FILE_ATTRIBUTE_SPARSE_FILE oder durch ein selbstdefiniertes const faSparseFile = $00000200; .



Wenn beim Kopieren das Zielsystem kein Sparse kann, dann wird das einfach ersetzt,
genauso, wie alle Programme "transparent" drauf zugreifen können.

Wenn irgendjemand einen ausgelassenen Bereich lesen will, dann wird das vom Windows durch viele Nullen (#0) ersetzt.
Programme, welche beim Lesen mit SparseFiles umgehen können, überspringen dagegen solche Bereiche und versuchen garnicht sie zu lesen, weil sie ja wissen, dass dort nicht ist.


Und du hast überall im System SparseFiles.
z.B. die NTFS-Komprimierung nutzt das.
Diese Dateien werden Blockweise komprimiert (z.B. je 64KB), aber Blöcke bleiben "logisch" an ihrem Platz, wobei die ungenutzten Bereiche (Blockgröße-KomprimierteBlockgröße) als Sparse physisch von der Platte entfernt werden.
So kann in der Datei rumgeschrieben werden, ohne dass nachfolgende Blöcke verschoben werden müssen, auch wenn sich die komprimierten Blocklängen ändern.

Das ist auch der Grund, warum es auf Dateisystemen mit zu großen Clustern keine Kompression gibt, da dort durch Sparse keiner oder nicht genügend Speicher eingespart/ausgeschnitten werden kann.
https://blogs.msdn.microsoft.com/ntd...s-compression/
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (30. Jul 2018 um 14:35 Uhr)
  Mit Zitat antworten Zitat