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.
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% 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%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%Tags und Links delphi compression ntfs