这是我在这里的第一个问题,请耐心等待。
我的目标是在C#中创建一个基本的.zip存档。我已经尝试使用内置的GZipStream
类.NET并设法完成此操作,但后来我遇到的问题是我无法将文件命名为“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”算法压缩文件。我似乎无法弄清楚如何做到这一点。我已经注意到一些地方的属性设置,但我找不到任何文档或谷歌搜索告诉我在哪里设置它。
我意识到可能有更好的方法来做到这一点,我只是错过了一些东西,但是我不能坐下来,永远地为这样一个容易完成的任务而奋斗。任何帮助将不胜感激。
答案 0 :(得分:4)
如果你想要,你可以看看这个库,我之前使用过它,并且它很容易使用:dotnetzip
编辑(示例):
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);
}