2011-05-05 26 views
4

這是我在這裏的第一個問題,請耐心等待。C# - 如何使用7-zip庫(即不是.7z,但.zip)創建常規ZIP存檔?

我打算做的只是在C#中創建一個基本的.zip壓縮文件。我曾嘗試使用.NET的內置GZipStream類,並設法完成此操作,但後來我遇到了這樣的問題:如果沒有歸檔文件丟失它的擴展名,我就無法命名文件「usercode.zip」。由於受到限制,我無法讓程序將這些文件創建爲「usercode.trf.zip」,這是我發現將文件名的擴展名完整保留在歸檔文件中的唯一方法。

我試過使用一些其他的壓縮庫,我似乎無法管理讓他們正常工作或我想要的方式。

我來到SevenZipHelper庫,它提供了一些非常漂亮的函數來使用LZMA(或7-zip)庫來壓縮文件。

的代碼我使用如下所示:

//Take the BF file and zip it, using 7ZipHelper 
BinaryReader bReader = new BinaryReader(File.Open(pFileName, FileMode.Open)); 
byte[] InBuf = new byte[Count]; 

bReader.Read(InBuf, 0, InBuf.Length); 
Console.WriteLine("ZIP: read for buffer length:" + InBuf.Length.ToString()); 

byte[] OutBuf = SevenZip.Compression.LZMA.SevenZipHelper.Compress(InBuf); 

FileStream BZipFile = new FileStream(pZipFileName, FileMode.OpenOrCreate, FileAccess.Write); 
BZipFile.Seek(0, SeekOrigin.Begin); 
BZipFile.Write(OutBuf, 0, OutBuf.Length); 
BZipFile.Close(); 

這將創建一個壓縮文件整齊,使用7-ZIP算法。問題是我不能保證使用這個程序的客戶端將有權訪問7-zip,因此該文件必須使用正常的zip算法。我已經經歷了助手以及7-zip庫,似乎可以使用這個庫來用普通的「ZIP」算法壓縮文件。我似乎無法弄清楚如何做到這一點。我注意到幾個地方的屬性設置,但我找不到任何文檔或使用Google搜索來告訴我在哪裏設置。

我意識到可能有更好的方法來做到這一點,我只是錯過了一些東西,但我無法坐下來和這樣一個永遠很容易的任務鬥爭。任何幫助將不勝感激。

+0

那麼大,使用命令行中的7-Zip,就像這樣:'7za a -tzip D:\ myFile.zip D:\ MyPath \ *。*' – alex 2011-05-05 10:32:05

+0

這裏只是猜測,但您選擇的壓縮類型可能是問題... 。即第七行包含「SevenZip.Compression.LZMA」是否沒有替代壓縮LZMA? – Xander 2011-05-05 10:52:54

回答

4

如果你願意,你可以看看這個圖書館,我曾經使用過它,它preaty簡單易用:dotnetzip

EDIT(例如):

using (ZipFile zip = new ZipFile()) 
     { 
      foreach (String filename in FilesList) 
      { 
       Console.WriteLine("Adding {0}...", filename); 
       ZipEntry e = zip.AddFile(filename,""); 
       e.Comment = "file " +filename+" added "+DateTime.Now; 
      } 
      Console.WriteLine("Done adding files to zip:" + zipName); 
      zip.Comment = String.Format("This zip archive was created by '{0}' on '{1}'", 
       System.Net.Dns.GetHostName(), DateTime.Now); 

      zip.Save(zipName); 
      Console.WriteLine("Zip made:" + zipName); 
     } 
+0

謝謝@Gabriel,工作得很好。我認爲我曾經在某個時間點看過這個圖書館,但主頁並沒有讓它看起來那麼簡單。非常感激! – DeVil 2011-05-05 11:36:32

+0

@DeVil很高興我幫了忙。 – Gabriel 2011-05-05 12:08:37