【问题标题】:7-zip (7za.EXE) in C# to archive files of same name & store folder informationC# 中的 7-zip (7za.EXE) 用于归档同名文件并存储文件夹信息
【发布时间】: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


【解决方案1】:

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

所以动态删除它。如果你的路径是一致的,一个简单的path.Substring(3) 就足够了。

【讨论】:

  • 最重要的是,文件列表被另一个需要文件路径中指定的驱动器的可执行文件使用。
  • @DarthSheldon:有两个文件有问题吗?
  • 好奇我将如何实现它?到目前为止,我有 foreach(文件中的 FileInfoWrapper 包装器){ incrementZipStatusBar(); FileInfo item = wrapper.Info as FileInfo; includeFiles.Add(item.FullName.ToLower(), null);其中 item 表示文件路径,并且 includedFiles 将文件添加到 FileList.lst
  • 据我所知,Path 也不包含 .Substring()
  • 对不起,我忘了把这些发给你
猜你喜欢
  • 2020-07-10
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多