Wie kann ich das Komprimierungsattribut einer Datei in Delphi festlegen?

8

Wie kann ich Dateien komprimieren (setzen Sie das 'c' Attribut) von Delphi? Ich spreche über die Funktion "Inhalt komprimieren, um Speicherplatz zu sparen", die unter NTFS verfügbar ist.

Es scheint, dass FileSetAttr es mir nicht erlaubt, das Attribut "c" für a festzulegen Datei.

    
Sahara 09.08.2011, 20:32
quelle

3 Antworten

6

Die Dokumentation für SetFileAttributes() erklärt, dass die FILE_ATTRIBUTE_COMPRESSED flag wird von dieser Funktion nicht akzeptiert (obwohl es für GetFileAttributes) ist. Stattdessen gibt es an:

  

Um den Komprimierungszustand einer Datei festzulegen, verwenden Sie das DeviceIoControl Funktion mit der Funktion FSCTL_SET_COMPRESSION .

Der FSCTL_SET_COMPRESSION Link erklärt insbesondere genau, wie TU es. Es geht ungefähr so:

%Vor%     
David Heffernan 09.08.2011, 21:04
quelle
7

Sie können auch die CIM_DataFile und CIM_Directory WMI-Klassen, beide hatten zwei Methoden namens Compress und UnCompress , mit dem die NTFS-Komprimierung in einer Datei oder einem Ordner festgelegt werden kann.

Überprüfen Sie diese Beispiele (wenn die)

Komprimiere (NTFS) oder dekomprimiere eine Datei

%Vor%

Komprimiere (NTFS) oder dekomprimiere einen Ordner

%Vor%     
RRUZ 09.08.2011 22:58
quelle
6

Hier gehen Sie. Nennen Sie das gegen eine Datei oder einen Ordner und es sollte die Aufgabe für Sie erledigen. State = true macht es komprimiert, State = false macht die Komprimierung rückgängig. Denken Sie jedoch daran, dass, wenn Sie es gegen einen Ordner ausführen, es nur das Attribut ändert und es so macht, dass in diesem Ordner erstellte zukünftige Dateien komprimiert werden. Um die bereits vorhandenen zu komprimieren, müssen Sie iterieren und diese für jede Datei aufrufen (FindFirst / FindNext / FindClose). HTH.

%Vor%     
Glenn1234 09.08.2011 21:18
quelle

Tags und Links