繁体   English   中英

C#:以编程方式创建拆分的zip文件

[英]C#: Programmatically create a split zip file

我想从一个约1.5GB的文件夹中创建一个zip文件,并将该zip文件拆分为100MB的块。 我已经找到了很多线程,但是对我来说还没有解决任何问题。

首先,我尝试了System.IO.Compression,但发现它不支持拆分zip文件(如果我输入错了,请纠正我!)。

接下来,我尝试了Ionic.zip,它看起来超级简单,但是我创建的每个文件集都以某种方式损坏(例如,以下将fonts目录用作测试目录的代码创建了我无法创建的文件集然后使用winzip或winrar打开或解压缩为存档):

using (var zipFile = new Ionic.Zip.ZipFile(Encoding.UTF8))
{
    zipFile.AddDirectory("c:\\windows\\fonts", directoryPathInArchive: string.Empty);
    zipFile.MaxOutputSegmentSize = 100 * 1000000;
    zipFile.Save("c:\\users\\me\\test.zip");
}

最后,我尝试了7z.dll和SharpCompress。 使用命令行和7z.exe文件,以下各项可完美运行:

7z.exe a "c:\users\me\test.zip" "c:\Windows\Fonts" -v100m

但是以下代码给出错误“值不在预期范围内”。

SevenZipCompressor.SetLibraryPath("c:\\program files\\7-zip\\7z.dll");
var compressor = new SevenZipCompressor();
compressor.CompressionMethod = CompressionMethod.Lzma2;
compressor.CustomParameters.Add("v", "100m");
compressor.CompressDirectory("c:\\windows\\fonts\\", "c:\\users\\me\\test.zip");

我还尝试了以下操作(尝试弄清了SharpCompress中的命令行开关是如何工作的),它确实创建了一个zip文件,但没有将其拆分:

SevenZipCompressor.SetLibraryPath("c:\\program files\\7-zip\\7z.dll");
var compressor = new SevenZipCompressor();
compressor.CompressionMethod = CompressionMethod.Lzma2;
compressor.CustomParameters.Add("mt", "on");
compressor.CustomParameters.Add("0", "LZMA2:c=100m");
compressor.CompressDirectory("c:\\windows\\fonts\\", "c:\\users\\me\\test.zip");

有谁知道为什么以上任何一种方法都行不通? 还是还有其他人们尚未尝试过的工作方式?

谢谢!

我不知道支持PKZIP拆分zip文件格式的库。

这是一个老问题,但是Ionic正在工作。 也许有些棘手,但是还可以。 我的第一个版本还创建了一组无法解压缩的文件。 但是在更改命令顺序之后,可以解压缩输出。

    private static void CreateEncryptedZipFile(string filename, string to, FileInfo fi, string password)
    {
        using (var zipFile = new Ionic.Zip.ZipFile())
        {
            zipFile.Password = password;
            zipFile.Encryption = Ionic.Zip.EncryptionAlgorithm.WinZipAes256;
            zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
            zipFile.AddFile(filename, directoryPathInArchive: string.Empty);
            zipFile.MaxOutputSegmentSize = 1024*1024*128;
            zipFile.Save(to + ".zip");
        }
        createXMLInfo(fi, to);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM