Hallo,
ich mache in meiner Freizeit gerade ein kleines Projekt und möchte hierzu eine Datei mit dem WPF SaveFileDialog speichern siehe: SaveFileDialog bearbeiten
Diese Datei soll auch als zip oder 7zip Archiv gespeichert werden können. Leider finde ich bisher keine geeigneten libraries. Habe etwas gegooglet und dann mal die DotNetZip versucht. Geht für ZIP gut, aber ich glaube nicht für 7zip oder doch?
Wie würdet ihr es implementieren?
Habe daran gedacht direkt mit der 7z.exe das ganze zu verwirklichen wie es hier beschrieben ist: http://www.dotnetperls.com/7-zip
Code:
static void Main()
{
string sourceName = "ExampleText.txt";
string targetName = "Example.gz";
// 1
// Initialize process information.
//
ProcessStartInfo p = new ProcessStartInfo();
p.FileName = "7za.exe";
// 2
// Use 7-zip
// specify a=archive and -tgzip=gzip
// and then target file in quotes followed by source file in quotes
//
p.Arguments = "a -tgzip \"" + targetName + "\" \"" + sourceName + "\" -mx=9";
p.WindowStyle = ProcessWindowStyle.Hidden;
// 3.
// Start process and wait for it to exit
//
Process x = Process.Start(p);
x.WaitForExit();
}
Mit ein wenig anpassen läuft das ganze auch. Ist das eine gute Lösung oder gibt es bessere?
Es ist auf jeden Fall eine Lösung. Wenn die für dich in Ordnung ist, ist es auch schon die Lösung.
Besser geht natürlich immer. 7Zip hat z.B. ein SDK mit C#-Samples, mit dem man selbst basteln kann. Auch gibt es mit SharpCompress einen Wrapper.
Bin halt immer bestrebt die optimalste Lösung zu nutzen.
Zu SharkCompress:
Das habe ich auch mal ins Auge gefasst bzw. wollte es testen, aber ich glaube das unterstützt nicht das Erstellen eines 7zip Archives:
SharpCompress - a fully native C# library for RAR, 7Zip, Zip, Tar, GZip, BZip2
Stimmt, aber der Code ist da, sprich, du kannst das Komprimieren ggf. auch selbst implementieren. Oder eben das SDK mal anschauen, ob du da was brauchbares drin findest.
Am besten sollte es sein von 7zip das SDK zu nehmen.
Zip könnte man sonst mit .NET 4.0+ einbinden ohne zusätzliche Abhängigkeiten.
Da 7zip aber schon fast alles dabei hat, kann man direkt darauf springen.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Hallo,
hast Du dieses mal ausprobiert?
http://sevenzipsharp.codeplex.com/
Ich habe es schon mal erfolgreich einsetzen können.
Ja da war ich auch schon, aber die Dokumentation ist mangelhaft bzw. die Beispiele unvollständig (fehlende Libs).
Eigentlich ist es relativ simpel Sevenzipsharp einzubinden und für die gängigen Operationen sollten sich auch genug Codebeispiele finden lassen. Die Lib benötigt, wenn ich mich recht erinnere, die originale 7zip.dll als Referenz. Wo genau hat es denn nicht hingehauen? Ich hab ebenfalls ein Projekt in dem die Lib super funktioniert.
Hallo,
SevenZip funktioniert jetzt. Hatte beim Source dummerweise ein File statt eines Ordners angegeben.
Ich hab das schon richtig gelesen, dass SevenZipSharp das Packen UND Enpacken für sowohl 7zip als auch Zip und sogar Streams supported?
https://sevenzipsharp.codeplex.com/
You can compress streams, files or whole directories in OutArchiveFormat - 7-zip, Xz, Zip, GZip, BZip2 and Tar.
Hier habe ich damals noch mein Beispiel gepostet:
Hallo,
danke für den Hinweis. Meine Methode hat gut funktioniert und ich hab sie mit 1-2 Zeilen von deiner noch erweitert.
Damit es 100% funktioniert steh ich noch vor einem Problem. Ich lass für den input Ordner ein Verzeichnis im Temp ermitteln:
Environment.GetEnvironmentVariable("TEMP")
Dann bekomme ich allerdings:
C:\Users\SMILOV~1\AppData\Local\Temp\TestApp
statt
C:\Users\SMilovenskah\AppData\Local\Temp\TestApp
Weiß jemand wie ich den vollen Namen ohne Tilde bekomme?
Hallo,
Path.GetTempPath() liefert dir den temporären Pfad so zurück wie du es möchtest. 😉
Damit sparst du dir das direkte auslesen der Umgebungsvariable.
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Ja habs inzwischen rausbekommen.
Das allerletzte Problem (alle anderen hab ich inzwischen gelöst) ist, dass das Compressing Event nicht ausgelöst wird und ich somit keine Progressbar nutzen kann.
Das Compressing event funktioniert zwar mit 7zip, jedoch nicht mit ZIP
Ich kann mich ganz dunkel dran erinnern, dass ich damals dasselbe Problem mit dem Event bei den ZIP Files hatte und ich hab es dann einfach in den, zum Glück zur Verfügung stehenden, Sourcen nachimplementiert. Das sollte kein großes Ding sein.