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

时间:2018-05-23 15:41:06

标签: c# .net compression 7zip sharpcompress

我想从一个大约1.5GB的文件夹创建一个zip文件,并将该zip文件拆分为100MB的块。我已经找到了不少线程,但没有什么能帮到我。

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

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

for (let index = 0; index < clientTypes.length; index++) {
   this.clientTypesInputs[index] = 0; 
}

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

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.exe a "c:\users\me\test.zip" "c:\Windows\Fonts" -v100m

我还尝试过以下方法(尝试弄清楚命令行如何在SharpCompress中工作),这会创建一个zip文件,但不会将其拆分:

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

有谁知道为什么上述任何一种方法都不起作用?或者还有其他方法,人们已经开始工作,我还没有尝试过吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这是一个古老的问题,但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);
    }