2010-03-23 16 views
12

Voglio comprimere un'intera directory che può avere un numero qualsiasi di sottodirectory in un singolo file ZIP.Come comprimere una directory in un file zip a livello di codice

Sono in grado di comprimere un singolo file in un file zip a livello di programmazione.

Per comprimere un'intera directory, posso pensare a un programma ricorsivo che percorre ciascuna sottodirectory e lo comprime.

Ma esiste un modo semplice per comprimere l'intera cartella utilizzando il codice simile, senza dover scrivere funzioni ricorsive?

risposta

17

Utilizzando DotNetZip, c'è un AddDirectory() metodo sulla classe ZipFile che fa quello che vuoi:

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

Questo esempio e molti altri sono available on codeplex.

+0

DotNetZip non è destinato alla produzione. Contiene alcuni bug cruciali. Ho già dimenticato quale esattamente, ma ho concluso una volta dopo lunghe indagini che allo stato attuale è assolutamente inaffidabile. – SerG

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

Considerando 'DotNetZip' e' SharpZipLib' sono entrambi abandonware, una soluzione .NET effettiva è l'ideale. – TEK

+1

Non riesco mai a ricordare la sintassi per questo. Non dimenticare di aggiungere un riferimento a System.IO.Compression.FileSystem e un'istruzione using per System.IO.Compression. – Scott

Problemi correlati