使用System.IO.Packaging生成一个ZIP文件

使用System.IO.Packaging生成一个ZIP文件

问题描述:

我知道通常建议使用DotNetZip或SharpZipLib库来创建.net语言的ZIP文件(本例中为C#),但它不是不可能使用System.IO.Packaging生成ZIP文件。我认为可以尝试在C#中开发一个可以实现它的例程,而不需要下载任何外部库。有没有人有使用System.IO.Packaging生成ZIP文件的方法的一个很好的例子?使用System.IO.Packaging生成一个ZIP文件

+0

好的,在阅读了一下之后,它看起来像使用System.IO.Packaging的尴尬并不是人们像鼠疫一样避免它的唯一原因;它也会在生成的每个压缩文件中生成一个愚蠢的[Content_Types] .xml文件,并且存在与其他zip文件客户端兼容性的严重问题。所以...我想我会使用DotNetZip。 :-) – Jez 2011-06-17 14:05:50

让我google一下你 - > System.IO.Packaging程序+生成+拉链

第一链接 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

当然,但这并不需要一个路径,并将其所有的目录和文件添加到ZIP中;必须手动指定单个文件。 – Jez 2011-06-17 13:27:14

在.NET框架4.5,您可以在System.IO.Compression使用新类命名空间。