Eni*_*ity 6 c# powershell zip 7zip
我一直在使用“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");
}
Run Code Online (Sandbox Code Playgroud)
这里要注意的关键是文件名是相同的,它们直接包含在同名的文件夹中,当我创建 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"
Run Code Online (Sandbox Code Playgroud)
但我得到这个输出:
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
Run Code Online (Sandbox Code Playgroud)
如果我添加-spf命令行,那么它就可以工作,但是我的存档现在创建的每个文件夹都从C.
从命令行添加项目时,7-Zip 中有没有办法允许它创建逻辑文件夹结构?
明确地说,我正在选择要存档的文件夹中的文件子集,并且我想将它们放在逻辑文件夹中。
如果您只是想压缩文件夹中的所有内容,那么您可以这样做,它将保持文件夹结构。
."C:\Program Files\7-Zip\7z.exe" a -mx9 "C:\_test\20210112 Testing.7z" "C:\_test\*"
Run Code Online (Sandbox Code Playgroud)
编辑:要选择性地存档某些文件,请使用相对路径。在您的情况下,您可以设置C:\_test为当前目录,然后运行
."C:\Program Files\7-Zip\7z.exe" a -mx9 "C:\_test\20210112 Testing.7z" "Data\Testing\data.txt" "Logs\Testing\data.txt"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
549 次 |
| 最近记录: |