【发布时间】:2012-07-09 17:18:21
【问题描述】:
我的软件应该使用 7zip 将文件收集到 .zip 或 .7z 存档中,但由于软件的性质,有很多文件名称相同,但目录不同,例如:
D:\Software\Components\Station1\Alarms\Logs\ValvePressureSensor.xml
D:\Software\Components\Station1\Configurations\ValvePressureSensor.xml
D:\Software\Components\Station2\Alarms\Logs\ValvePressureSensor.xml
这些文件存储在“FileList.lst”列表中,我以这种方式调用 7-zip:
7za a -t7z "D:\Software\CollectedData\Diagnostics.7z"
"@D:\Software\ZipTemp\FileList.lst"
所以我想知道是否有办法在压缩每个文件时保留它们的目录以阻止 7-zip 标记重复文件?
我知道涉及从每个文件路径的开头删除“D:\”的解决方法,但这将是手动不可能的,因为“FileList.lst”在 C# 代码中填充了大约 1500~3000文件(并不总是相同的文件),并且 FileList.lst 位于一个临时文件夹中,该文件夹被创建、压缩,然后动态销毁。所以我无法将 7za.EXE 存储在同一区域。最重要的是,文件列表被另一个需要文件路径中指定的驱动器的可执行文件使用。
我应该提到我正在使用 Visual Studio 2005、C#2.0 和 7-zip v9.20。
编辑:我的问题之前相当广泛,我应该澄清一下我正在从 WinZip 切换(由于许可问题)所以我记得在 WinZip 中如果添加 -p 开关,WinZip 将存储添加的所有文件的文件夹信息,不仅适用于子文件夹中的文件;文件夹信息将从命令行中指定的文件夹开始。你知道 7zip 中有类似的东西吗?
编辑 2:原来你不能用 7-zip 保存文件夹信息
【问题讨论】:
-
关于使用
7za.exe的问题更适合超级用户。 -
为什么不使用 C# 创建 zip 文件而不是使用 7zip?有几个库,例如 DotNetZip 或 SharpZipLib(或者如果您使用的是 .net 3.0 及更高版本,则可以使用 System.IO.Packaging 和 System.IO.Compression)。
-
@Karl-JohanSjögren 或 7z.dll 的 C# 包装器 sevenzipsharp.codeplex.com
-
@kenny 请参阅编辑,这是否可能仅使用 vanilla 7-zip 或 Sevenzipsharp 允许这样做?
-
@DarthSheldon,抱歉我不知道。我有一个类似的路径问题,我必须解决。我不认为 C# 包装器添加了您可以通过命令行获得的任何功能。
标签: c# .net visual-studio-2005 c#-2.0 7zip