c# - C#:以编程方式创建拆分 zip 文件
问题描述
我想从一个大约 1.5GB 的文件夹创建一个 zip 文件,并将该 zip 文件分成 100MB 的块。我在这方面找到了很多线索,但对我来说没有什么能解决的。
首先我尝试了 System.IO.Compression,但发现它不支持拆分 zip 文件(如果我错了,请纠正我!)。
接下来我尝试了 Ionic.zip,它看起来超级简单,但是我创建的每组文件都以某种方式损坏(例如,以下使用字体目录作为测试目录的代码创建了一组我不能然后使用 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 文件格式的库。
推荐阅读
- r - Partially suppress labels in R
- java - 为什么生成的带有 PDF 框的 PDF 表单与多行文本框结果在云服务器上看起来不同?
- ios - 自定义 UINavigationBar 渐变背景和徽标中的图像
- three.js - aframe,TransformControls 不适用于 3D 对象
- asp.net-core - 请求正文太大 - Kestrel - 在 context.Request.Body.CopyToAsync 失败
- node.js - 即使没有人在做请求,Nodemon 也会继续记录中间件的内容
- regex - 正则表达式搜索多个字符串垃圾邮件
- javascript - 对 GraphQl 查询不区分大小写进行排序
- java - 无法绑定“spring.rabbitmq”下的属性
- rest - 为什么每当我尝试将 rest 运算符作为参数输入箭头函数时,vscode 的智能感知一直在执行代码完成?