![]() |
NTFS-Komprimierung einer einzelnen Datei?
Hallo und schönes Wochenende!
Ich wollte mit
Delphi-Quellcode:
das Dateiattribut
TFile.SetAttributes
Delphi-Quellcode:
einer einzelnen Datei setzen, aber es funktionierte nicht.
faCompressed
Dann las ich: Zitat:
Code:
Aber es funktionierte nicht. Die Konsole meldete zurück:
compact "C:\meintest\meineapp.exe"
Code:
Was könnte die Ursache dafür sein? Wie kann man die NTFS-Komprimierung dieser Datei mit Delphi bzw. programmatisch durchführen?
1603048 : 1603048 = 1,0 zu 1 meineapp.exe
Von 1 Dateien in 1 Verzeichnissen sind 0 komprimiert und 1 nicht komprimiert. 1.603.048 Datenbytes insgesamt werden in 1.603.048 Bytes gespeichert. Das Komprimierungsverhältnis ist 1,0 zu 1. |
AW: NTFS-Komprimierung einer einzelnen Datei?
Aha. Ich habe den
Code:
switch vergessen. Damit funktioniert es.
/c
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Wenn man den compact-Befehl für eine Datei ausführt, die bereits NTFS-komprimiert ist, so scheint nichts zu passieren.
Man braucht also offensichtlich nicht vorher zu prüfen, ob die Datei nicht NTFS-komprimiert ist? |
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
![]() Verschlüsselung, Kompression und andere "Attribute" sind da nur als Information (ReadOnly) enthalten. Genauso das FILE_ATTRIBUTE_NORMAL, welches nur dafür da ist, um "kein Atribut gesetzt" von "Fehler" unterscheiden zu können, da sonst beides 0 wäre. |
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Was Compact intern macht, bzw. was man selber ausführen kann, wird dort auch genannt. :angle:
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Seltsamerweise funktioniert dein Link für mich nicht:
Zitat:
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Übrigens funktioniert das Setzen auch von "einfachen" Dateiattributen von Dateien in geschützten Verzeichnissen wie "C:\Program Files (x86)\..." natürlich nur mit Administrator-Privilegien.
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Da ich garantiert vom TE falsch verstanden werde, Versuche ich es erst gar nicht zu Erklären sondern gebe nur ein Sample.
Delphi-Quellcode:
So könntest Du Dateien mit NTFS Komprimieren.
const
COMPRESSION_FORMAT_NONE = 0; COMPRESSION_FORMAT_DEFAULT = 1; COMPRESSION_FORMAT_LZNT1 = 2; procedure SetCompressionAttribute(const FileName: string; const CompressionFormat: USHORT); const FSCTL_SET_COMPRESSION = $9C040; var Handle: THandle; Flags: DWORD; BytesReturned: DWORD; begin if DirectoryExists(FileName) then Flags := FILE_FLAG_BACKUP_SEMANTICS else if FileExists(FileName) then Flags := 0 else raise Exception.CreateFmt('%s does not exist', [FileName]); Handle := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, Flags, 0); if Handle=0 then RaiseLastOSError; if not DeviceIoControl(Handle, FSCTL_SET_COMPRESSION, @CompressionFormat, SizeOf(Comp), nil, 0, BytesReturned, nil) then begin CloseHandle(Handle); RaiseLastOSError; end; CloseHandle(Handle); end; |
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
Zitat:
Aber welchen Vorteil hat das, außer dass es viel komplizierter und fehleranfälliger ist? Das hier ist viel einfacher:
Delphi-Quellcode:
ShellExecEx('compact', '/c "' + AFile + '"', '', SW_HIDE);
Und das ist zum Verschlüsseln:
Delphi-Quellcode:
ShellExecEx('cipher', '/e /a "' + AFile+ '"', '', SW_HIDE);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz