Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   TZIpFile Komprimierung (https://www.delphipraxis.net/209733-tzipfile-komprimierung.html)

API 15. Jan 2022 08:54

TZIpFile Komprimierung
 
TZIpFile unterstützt diese Komprimierungen.

Wenn TZipCompression.zcLZMA verwendet wird, erscheint diese Meldung:

Zitat:

Support for compression method not registered: LZMA.

(D 10.3)

Mein Testcode:

Delphi-Quellcode:
uses
   System.Zip;
   
procedure TForm1.zipClick(Sender: TObject);
const
  f = 'c:\irgendwas.zip'; // output file
  v = 'C:\temp' // Ordner, welcher komprimiert werden soll.
var
  myZipFile: TZIpFile;
begin

  if FileExists(f) then
  begin
    TFile.Delete(f);
  end;

  myZipFile := TZIpFile.Create;
  myZipFile.Open(f, TZipMode.zmWrite);
  myZipFile.Close;
  myZipFile.Free;

  TZIpFile.ZipDirectoryContents(f, v, TZipCompression.zcLZMA);

end;
Zusatzfrage: Welche Komprimierung verwendet Windows (10) ?

himitsu 15. Jan 2022 09:05

AW: TZIpFile Komprimierung
 
Was hat das mit Win10 zu tun?

Es wird nichts von Windows verwendet.



Es kann anzeigen, dass es diese offiziell registrierten Kompimierungsmethoden gibt,
https://pkware.cachefly.net/webdocs/...es/APPNOTE.TXT > 4.4.5 compression method

aber das heißt noch lange nicht, dass diese Alle auch in der Delphi-Komponente "implementiert" sind.


Außer Stored und Deflate kann TZipFile nichts packen oder entpacken.
Du kannst nur eine fremde Zip laden und dann nachsehn, ob sowas verwendet wurde.

Alternativ kannst/mußt DU zusätzliche Methoden implementieren und bei TZipFile registrieren, dann ginge es auch damit.
siehe TZipFile.Create

API 15. Jan 2022 09:20

AW: TZIpFile Komprimierung
 
Zitat:

Zitat von himitsu (Beitrag 1500622)
Was hat das mit Win10 zu tun?
Es wird nichts von Windows verwendet.

Ich möchte wissen, welcher Algorithmus von Windows verwendet wird, damit ich in Delphi denselben verwenden kann.

Mittlerweile habe ich die ShellZipTool Unit gefunden: https://www.delphipraxis.net/988492-post9.html, welche das macht, was ich brauche.

himitsu 15. Jan 2022 09:23

AW: TZIpFile Komprimierung
 
Windows ist egal.

Es macht das, was ZIP standardmäßig "selbst" kann, also was dort auch entwickelt oder lizenziert ist.
Und das ist Deflate, sowie Stored (unkomprimiert).

Alles Andere kommt/kam von Fremdentwicklern und ist "optional".
Darum kann auch nie alles drin sein, was offiziell registriert ist oder auch nicht, wegen fehlender Lizenzen und so.

API 15. Jan 2022 09:28

AW: TZIpFile Komprimierung
 
Antwort gefunden:

Zitat:

The file compression algorithm used by the NTFS file system is Lempel-Ziv compression.

himitsu 15. Jan 2022 09:33

AW: TZIpFile Komprimierung
 
Das ist auch egal.

NTFS macht der Dateisystemtreiber.
Das hat nichts mit ZIP zu tun.

Es gibt nur noch das ZipFolder-Addon im Explorer und das kennt die MinimalAusstattung der ZIP-Spezifikation. (inkl. Zip64)






im Dateisystem:
FindFirstFile/GetFileAttribute/... mit FILE_ATTRIBUTE_COMPRESSED zum Lesen,
oder DeviceIoControl mit FSCTL_SET_COMPRESSION zum Setzen
und GetCompressedFileSize für die "reale" Dateigröße"


Es gibt im .NET / C# eine Zip-Klasse System.IO.Compression.ZipFile (die Win32-API hat sowas wohl nicht)
https://docs.microsoft.com/en-us/win...-decompression

Der Lempel-Ziv-Algorithmus ist OpenSource von Microsoft auf GitHub zu finden.
Aber es gibt auch passende APIs dafür, um es selbst im Programm zu nutzen. (außerhalb des NTFS)
https://docs.microsoft.com/en-us/win...ompression-api
https://docs.microsoft.com/de-de/dot...-extract-files
Das ist dann sowas ähliches wie TCompressedStream, womit man die Komprimierung von ZIP einzeln nutzen kann.




Die NTFS-Verschlüsselung ist da schöner gelöst, als die Komprimierung.
FILE_ATTRIBUTE_ENCRYPTED mit EncryptFile, DecryptFile, OpenEncryptedFileRaw usw.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 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