2010-03-23 5 views
12

Ich möchte ein ganzes Verzeichnis komprimieren, das beliebig viele Unterverzeichnisse in einer einzigen ZIP-Datei enthalten kann.Wie man ein Verzeichnis programmatisch in eine Zip-Datei komprimiert

Ich bin in der Lage, eine einzelne Datei in eine ZIP-Datei programmgesteuert zu komprimieren.

Um ein ganzes Verzeichnis zu komprimieren, kann ich mir ein rekursives Programm vorstellen, das durch jedes Unterverzeichnis geht und es komprimiert.

Aber gibt es eine einfache Möglichkeit, den gesamten Ordner mit dem ähnlichen Code zu komprimieren, ohne irgendwelche rekursiven Funktionen schreiben zu müssen?

Antwort

17

DotNetZip benutzen, gibt es eine AddDirectory() Methode für die ZipFile-Klasse, die das tut, was Sie wollen:

using (var zip = new Ionic.Zip.ZipFile()) 
{ 
    zip.AddDirectory("DirectoryOnDisk", "rootInZipFile"); 
    zip.Save("MyFile.zip"); 
} 

Dieses Beispiel und viele andere sind available on codeplex.

+0

DotNetZip ist nicht für die Produktion. Es enthält einige wichtige Fehler. Ich vergesse schon was genau, aber ich habe nach langen Untersuchungen einmal festgestellt, dass es im aktuellen Zustand absolut unzuverlässig ist. – SerG

5
ZipFile.CreateFromDirectory(<path of folder you need to zip>, <path of zip file with .zip in the end>, CompressionLevel.Fastest, true); 
+0

Wenn man bedenkt, dass 'DotNetZip' und' SharpZipLib' beide Abandonware sind, ist eine tatsächliche .NET-Lösung ideal. – TEK

+1

Ich kann mich nie an die Syntax dafür erinnern. Vergessen Sie nicht, einen Verweis auf System.IO.Compression.FileSystem und eine using-Anweisung für System.IO.Compression hinzuzufügen. – Scott