2011-06-17 30 views
12

Sé que las bibliotecas DotNetZip o SharpZipLib suelen ser recomendadas para crear archivos ZIP en un idioma .net (C# en mi caso), pero no es imposible para usar System.IO.Packaging para generar un archivo ZIP. Pensé que sería bueno intentar desarrollar una rutina en C# que pudiera hacerlo, sin la necesidad de descargar ninguna biblioteca externa. ¿Alguien tiene un buen ejemplo de un método o métodos que usará System.IO.Packaging para generar un archivo ZIP?Usando System.IO.Packaging para generar un archivo ZIP

+0

OK, después de leer un poco, parece que la incomodidad de usar System.IO.Packaging no es la única razón por la que las personas lo evitan como la peste; también genera un archivo tonto [Content_Types] .xml en cada archivo zip en genera, y existen serios interrogantes en cuanto a su compatibilidad con otros clientes de archivos zip. Entonces ... supongo que usaré DotNetZip. :-) – Jez

Respuesta

29

déjame google esto para usted -> System.IO.Packaging + + generar postal

primer eslabón http://weblogs.asp.net/jongalloway//creating-zip-archives-in-net-without-an-external-library-like-sharpziplib

using System; 
using System.IO; 
using System.IO.Packaging; 

namespace ZipSample 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      AddFileToZip("Output.zip", @"C:\Windows\Notepad.exe"); 
      AddFileToZip("Output.zip", @"C:\Windows\System32\Calc.exe"); 
     } 

     private static void AddFileToZip(string zipFilename, string fileToAdd, CompressionOption compression = CompressionOption.Normal) 
     { 
      using (Package zip = System.IO.Packaging.Package.Open(zipFilename, FileMode.OpenOrCreate)) 
      { 
       string destFilename = ".\\" + Path.GetFileName(fileToAdd); 
       Uri uri = PackUriHelper.CreatePartUri(new Uri(destFilename, UriKind.Relative)); 
       if (zip.PartExists(uri)) 
       { 
        zip.DeletePart(uri); 
       } 
       PackagePart part = zip.CreatePart(uri, "", compression); 
       using (FileStream fileStream = new FileStream(fileToAdd, FileMode.Open, FileAccess.Read)) 
       { 
        using (Stream dest = part.GetStream()) 
        { 
         fileStream.CopyTo(dest); 
        } 
       } 
      } 
     }    
    } 
} 
+0

Claro, pero esto no toma un camino, y agrega todos sus directorios y archivos en el ZIP; uno debe especificar los archivos individuales manualmente. – Jez

+9

¿Realmente no puedes implementarlo tú mismo? : S – RamonBoza

+0

Mirar - Listado de archivos en un directorio en C# http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=356 – RamonBoza

9

En .NET Framework 4.5 se pueden utilizar las nuevas clases en el System.IO.Compression espacio de nombres

Cuestiones relacionadas