Wie kann ich 7-Zip-Archive aus meiner C # -Konsolenanwendung erstellen? Ich muss in der Lage sein, die Archive mit dem regulären, weit verbreiteten 7-Zip- Programm zu extrahieren .
Hier sind meine Ergebnisse mit den Beispielen als Antworten auf diese Frage
- "Shelling out" für 7z.exe - dies ist der einfachste und effektivste Ansatz, und ich kann bestätigen, dass er gut funktioniert . Wie workmad3 erwähnt , muss ich nur garantieren, dass 7z.exe auf allen Zielcomputern installiert ist, was ich garantieren kann.
- 7Zip in der Speicherkomprimierung - Dies bezieht sich auf das Komprimieren von Cookies "im Speicher" vor dem Senden an den Client. Diese Methode scheint etwas vielversprechend. Die Wrapper-Methoden (das LZMA SDK umschließen ) geben den Rückgabetyp zurück
byte[]
. Wenn ich dasbyte[]
Array in eine Datei schreibe , kann ich es nicht mit 7-Zip (File.7z is not supported archive
) extrahieren . - 7zSharp Wrapper (auf CodePlex verfügbar ) - Dies umschließt das 7z exe / LZMA SDK . Ich habe in meiner App auf das Projekt verwiesen und einige Archivdateien erfolgreich erstellt, konnte die Dateien jedoch nicht mit dem regulären 7-Zip-Programm (
File.7z is not supported archive
) extrahieren . - 7Zip SDK alias LZMA SDK - Ich glaube, ich bin nicht klug genug, um herauszufinden, wie man das verwendet (weshalb ich hier gepostet habe) ... Beispiele für Arbeitscodes, die das Erstellen eines 7zip-Archivs demonstrieren, das von der extrahiert werden kann reguläres 7zip Programm?
- CodeProject C # (.NET) -Schnittstelle für 7-Zip-Archiv-DLLs - unterstützt nur das Extrahieren aus 7zip-Archiven ... Ich muss sie erstellen!
- SharpZipLib - Laut FAQ unterstützt SharpZipLib 7zip nicht.
c#
.net
compression
7zip
Seibar
quelle
quelle
Antworten:
Wenn Sie garantieren können, dass die 7-zip-App auf allen Zielcomputern installiert wird (und im Pfad), können Sie sie durch Aufrufen der Befehlszeilen-App 7z auslagern. Nicht die eleganteste Lösung, aber die geringste Arbeit.
quelle
Beispiel für ein EggCafe 7Zip-Cookie für ein Dies ist ein Beispiel (Zipping-Cookie) mit der DLL von 7Zip.
CodePlex Wrapper Dies ist ein Open-Source-Projekt mit einer Warp-Zipping-Funktion von 7z.
7Zip SDK Das offizielle SDK für 7zip (C, C ++, C #, Java) <--- Mein Vorschlag
.Net-Zip-Bibliothek von SharpDevelop.net
CodeProject Beispiel mit 7zip
SharpZipLib Viele Reißverschlüsse
quelle
SevenZipSharp ist eine weitere Lösung. Erstellt 7-Zip-Archive ...
quelle
Hier ist ein vollständiges Arbeitsbeispiel mit dem SevenZip SDK in C #.
Es werden Standard-7zip-Dateien geschrieben und gelesen, die von der Windows 7zip-Anwendung erstellt wurden.
PS. Das vorherige Beispiel wurde nie dekomprimiert, da es niemals die erforderlichen Eigenschaftsinformationen an den Anfang der Datei schrieb.
quelle
Ich habe den SDK benutzt.
z.B:
quelle
Installieren Sie einfach 7 zip von der Quelle und übergeben Sie den Parameter an die Methode.
Vielen Dank. Bitte mag die Antwort.
quelle
Ich benutze diesen Code
quelle
Installieren Sie das aufgerufene NuGet-Paket
SevenZipSharp.Interop
Dann:
quelle
Einige zusätzliche Testinformationen zum @ Orwellophile-Code unter Verwendung einer 17,9-MB-Textdatei.
Die Verwendung der Eigenschaftswerte im Codebeispiel "wie sie sind" hat einen RIESIGEN negativen Einfluss auf die Leistung. Es dauert 14,16 Sekunden .
Wenn Sie die Eigenschaften auf Folgendes einstellen, wird derselbe Job bei 3,91 Sekunden ausgeführt einstellen, wird (u. A. Das Archiv verfügt über dieselben Containerinformationen: Sie können das Archiv mit 7zip extrahieren und testen, es sind jedoch keine Dateinameninformationen vorhanden.)
Native 7zip 2 Sek.
Ich habe einen weiteren Test mit nativem 7zip und einer 1,2 GB SQL-Sicherungsdatei (.bak)
7zip (maximale Komprimierung) durchgeführt: 1 Minute
LZMA SDK (@Orwellophile mit obiger Eigenschafteneinstellung): 12:26 min :-(
Ausgabedatei ungefähr gleich groß .
Ich denke, ich werde selbst eine Lösung verwenden, die auf der c / c ++ - Engine basiert. Rufen Sie entweder die ausführbare 7zip-Datei von c # aus auf oder verwenden Sie squid-box / SevenZipSharp , einen Wrapper um die 7zip c / c ++ - DLL-Datei, und es scheint die neueste Gabel von SevenZipSharp zu sein. Ich habe den Wrapper noch nicht getestet, aber ich hoffe, er funktioniert genauso wie der native 7zip. Aber hoffentlich gibt es die Möglichkeit, Streams auch zu komprimieren, was Sie offensichtlich nicht können, wenn Sie die Exe direkt aufrufen. Ansonsten gibt es wohl keinen Vorteil gegenüber dem Aufruf der Exe. Der Wrapper weist einige zusätzliche Abhängigkeiten auf, sodass Ihr veröffentlichtes Projekt nicht "sauberer" wird.
Übrigens scheint das .Net Core-Team die Implementierung von LZMA in der Klasse system.io in .Core ver. 5, das wäre toll!
(Ich weiß, dass dies eine Art Kommentar und keine Antwort ist, aber um das Code-Snippet bereitstellen zu können, kann es kein Kommentar sein.)
quelle
Diese einfachste Möglichkeit besteht darin, mit ZIP-Dateien anstelle von .7z zu arbeiten und Dot Net Zip zu verwenden
Beim Auslösen von 7zip-Befehlen zur Shell gibt es andere Probleme wie Benutzerrechte. Ich hatte ein Problem mit SevenZipSharp.
quelle
SharpCompress ist meiner Meinung nach eine der intelligentesten Komprimierungsbibliotheken überhaupt. Es unterstützt LZMA (7-zip), ist einfach zu bedienen und befindet sich in der aktiven Entwicklung.
Da es bereits LZMA-Streaming-Unterstützung bietet, unterstützt es zum Zeitpunkt des Schreibens leider nur das Lesen von 7-Zip-Archiven. ABER das Schreiben von Archiven steht auf ihrer Aufgabenliste (siehe Readme). Für zukünftige Leser: Den aktuellen Status finden Sie hier: https://github.com/adamhathcock/sharpcompress/blob/master/FORMATS.md
quelle