Einzelnen Beitrag anzeigen

Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#1

Windows.CreateFile() ohne Kompression

  Alt 20. Mai 2011, 09:08
Hallo,

ich betreibe ein paar virtuelle Maschinen mit VirtualBox. Bislang gibt es dort immer noch kein Tool zum Verkleinern der Festplatte. Aus diesem Grunde benutze ich sdelete, um die Platte mit Nullen zu überschreiben und danach dann offline zu verkleinern.

Ich habe sdelete nun inkl. GUI nachgeschrieben. Ich habe aber ein Problem, wenn eine Partition mit NTFS formatiert und die Kompression eingeschaltet wurde. Da sich Nullen extrem gut komprimieren lassen, habe ich de facto eine Endlosschleife. Im Moment ist meine Nullen-Datei ca. 53 GB groß (Tendenz steigend - mal sehen, wie lange das Programm/Windows mitmachen ), verbraucht aber auf der Festplatte nur 4 KB.

Ich habe nun versucht, diese Problem dadurch zu lösen, dass ich FileCreate so aufrufe:
Delphi-Quellcode:
  lHandle:=CreateFile(PChar(lFileName),
    GENERIC_READ or GENERIC_WRITE, 0, nil, CREATE_ALWAYS,
    FILE_FLAG_DELETE_ON_CLOSE Or
    FILE_ATTRIBUTE_NORMAL Or // -> keine Kompression ?
    FILE_ATTRIBUTE_NOT_CONTENT_INDEXED, 0);
Das scheint es aber irgendwie nicht zu sein. Es gibt in Windows noch eine Konstante [DELPHI]FILE_ATTRIBUTE_COMPRESSED = $00000800;/DELPHI]. Ich ging davon aus, dass die Datei eben nicht komprimiert wird, wenn ich das Bit nicht setze.

Gibt es eine einfach Erklärung/Lösung für mein Problem oder muss ich als Workaround den Umweg über FSCTL_SET_COMPRESSION nehmen?

Gruß, Alex
Alex Winzer
  Mit Zitat antworten Zitat