C#中的7-zip(7za.EXE)用于存档同名文件&存储文件夹信息

时间:2012-07-09 17:18:22

标签: c# .net visual-studio-2005 c#-2.0 7zip

我的软件应该使用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

保存文件夹信息

1 个答案:

答案 0 :(得分:3)

  

我知道从每个文件路径的开头删除“D:\”的解决方法,但这不可能手动

因此请动态删除它。如果您的路径一致,那么简单的path.Substring(3)就足够了。