2011-06-17 107 views
12

我知道通常建議使用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

回答

29

讓我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

相關問題