我一直在使用“ DotNetZip”库通过以下代码来归档文件:
var files = new []
{
new { file = new FileInfo(@"C:\_test\Data\Testing\data.txt"), source = "Data" },
new { file = new FileInfo(@"C:\_test\Logs\Testing\data.txt"), source = "Logs" },
};
using (Ionic.Zip.ZipFile zipFile = new Ionic.Zip.ZipFile())
{
zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
foreach (var f in files)
{
zipFile.AddFile(f.file.FullName, f.source);
}
zipFile.Save(@"C:\_test\output.zip");
}
这里要注意的关键是文件名相同,它们直接包含在具有相同名称的文件夹中,并且当我创建Zip文件时,我正在创建逻辑文件夹以使文件可放入,因此没有文件名称冲突。
问题是Zip压缩很糟糕。实际上,我有一些示例,这些示例说明了我要放入一堆小文件并获得更大的Zip!
然后,我使用7-Zip进行了测试,结果非常好。文件大小比Zip小得多。
因此,我尝试使用7-Zip重写我的代码,但是似乎没有一个适用于.NET的良好的7-Zip库,唯一的选择是通过命令行使用7-Zip。
我在Powershell中尝试过此操作:
."C:\Program Files\7-Zip\7z.exe" a -mx9 "C:\_test\20210112 Testing.7z" "C:\_test\Data\Testing\data.txt" "C:\_test\Logs\Testing\data.txt"
但是我得到以下输出:
7-Zip 19.00 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2019-02-21
Scanning the drive:
2 files, 40 bytes (1 KiB)
Creating archive: C:\_test\__test.7z
ERROR:
Duplicate filename on disk:
data.txt
data.txt
如果我添加了-spf
命令行,那么它可以工作,但是现在我的归档文件是从每个文件夹创建的C
。
从命令行添加项目时,是否有7-Zip中的方法允许它创建逻辑文件夹结构?
为了清楚起见,我正在选择要存档的文件夹中文件的子集,并将其放置在逻辑文件夹中。
如果您只想压缩文件夹中的所有内容,则可以这样做,它将保持文件夹结构。
."C:\Program Files\7-Zip\7z.exe" a -mx9 "C:\_test\20210112 Testing.7z" "C:\_test\*"
编辑:要有选择地存档某些文件,请使用相对路径。您可以将其设置C:\_test
为当前目录,然后运行
."C:\Program Files\7-Zip\7z.exe" a -mx9 "C:\_test\20210112 Testing.7z" "Data\Testing\data.txt" "Logs\Testing\data.txt"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句