我想从一个大约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");
有谁知道为什么上述任何一种方法都不起作用?或者还有其他方法,人们已经开始工作,我还没有尝试过吗?
谢谢!
答案 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);
}