2011-05-05 116 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