C# - 如何使用7-zip库创建普通的ZIP归档文件(即不是.7z,而是.zip)?

4

这是我在这里的第一个问题,所以请耐心等待。

我的目标只是在C#中创建一个基本的.zip归档文件。我尝试使用.NET的内置类来实现这一点,并成功完成了此操作,但是我有一个问题:如果不将存档文件命名为"usercode.trf.zip",则无法将文件命名为"usercode.zip",因为存档文件会失去其扩展名。由于限制,我不能让我的程序将这些文件创建为"usercode.trf.zip",这是我发现保留文件名扩展名的唯一方法。

我尝试使用了许多其他压缩库,但似乎无法使它们正常工作或按我想要的方式工作。

我发现了库,它提供了一些巧妙的功能,可以使用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算法。我已经查看了helper和7-zip库,似乎可以使用该库来使用普通的“ZIP”算法压缩文件。但我似乎无法弄清楚如何做到这一点。我注意到有几个地方的属性设置,但我找不到任何文档或谷歌搜索告诉我在哪里设置这个。
我意识到可能有更好的方法来解决这个问题,而我只是错过了什么,但我不能永远坐和挣扎着完成这样一个表面上容易的任务。非常感谢您的帮助。

你可以直接使用命令行中的7-Zip,像这样:7za a -tzip D:\myFile.zip D:\MyPath\*.* - alex
这只是一个猜测,但您选择的压缩类型可能是问题所在……即包含“SevenZip.Compression.LZMA”的那一行是否没有其他替代LZMA的压缩方式? - Xander
1个回答

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);
        }

谢谢 @Gabriel,那个方法很好用。我想我之前也遇到过这个库,但是主页上并没有像你所展示的那样简单明了。非常感谢! - DeVil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接