使用 SharpCompress 识别与给定 RAR 存档关联的卷
Posted
技术标签:
【中文标题】使用 SharpCompress 识别与给定 RAR 存档关联的卷【英文标题】:Using SharpCompress to identify the volumes associated with a given RAR archive 【发布时间】:2016-08-21 03:18:50 【问题描述】:TL;DR
网站主页上给出的示例代码无法编译。 如何列出多部分 RAR 文件中的所有卷?
问题定义
我有一个 Windows 10 文件夹,其中包含许多多部分 RAR 文件。 'root' rar 及其部分需要被隔离,然后移动到它们自己的文件夹中。我可以通过创建一个文件夹并检查文件名来手动执行此操作,以便根 rar 和“part01.rar”、“part02.rar”等都在同一个目录中。
当有几十个多部分文件时,手动过程很乏味,所以我正在编写一个 C# 应用程序。到目前为止,我了解到的是,这些多部分 RAR 文件的命名约定不一致,这让我陷入了检查文件名和通过字符串操作推断它们所属位置的尴尬练习.不酷。
所以我导入SharpCompress 是为了科学准确地获取文件名。在其documentation page 上有一个示例,它似乎完全符合我的要求。我已经为它包装了一个方法,现在将它作为“我尝试过的方法”呈现给你。
private static void GetFileNames(FileInfo rarFileInfo)
var archive = ArchiveFactory.Open(rarFileInfo.FullName);
foreach (var entry in archive.Entries)
if (!entry.IsDirectory)
Console.WriteLine(entry.FilePath);
...注意VS产生的红色文字...
它无法编译,因为 'FilePath' 无法解析!我有错误的框架吗?我在 VS2013 下使用 .NET 4.5。 理论上这里应该已经有很多问题了,因为主页上的文档示例无法编译,但没有(我检查过)。
问题:如何使用 SharpCompress 识别与给定 RAR 关联的所有卷,以便开发人员可以使用它们的名称。
注意:我也可以使用 WinRar API 将文件解压到它们自己的目录中,但这不是客户想要的。 实际上我稍后会解压它们,目的是将所有关联的卷放在它们自己的文件夹中。
【问题讨论】:
【参考方案1】:修复示例
请注意,这是一条红鲱鱼 您的问题似乎是您的文档和库不匹配
SharpCompress 的 CodePlex 上的最后一个版本是 0.10.3,为此(当我下载它时),您的代码和示例代码都可以正常工作。
但是,NuGet 和 GitHub 上存在的版本是 0.12.4
在这个版本中,FullPath 的 IArchiveElement 的成员似乎已被删除。
此版本的文档可在 github 上找到,因此示例已更改:
var archive = ArchiveFactory.Open(@"C:\Code\sharpcompress\TestArchives\sharpcompress.zip");
foreach (var entry in archive.Entries)
if (!entry.IsDirectory)
Console.WriteLine(entry.Key);
entry.WriteToDirectory(@"C:\temp", ExtractOptions.ExtractFullPath | ExtractOptions.Overwrite);
看来archive.Entries 现在是IArchiveEntry 的字典(或类似字典),并且路径用作字典的键,而不是作为IArchiveEntry 的成员 本身。
所以简短的回答是您应该在上面的代码中将Entry.FullPath
替换为Entry.Key
。不过,我不清楚这如何帮助确定哪些档案需要合并在一起。
如何真正解决您的问题
您真正想要的是找到组成多部分 rar 的卷。 这涉及使用“Rar”类的特定功能,而不是上面使用的基本接口。 这应该有效:
static void PrintVoulmes(string ArchivePath)
RarArchive openedArchive = RarArchive.Open(ArchivePath);
foreach (RarVolume vol in openedArchive.Volumes)
Console.WriteLine(vol.VolumeFile.FullName);
请注意,VolumeFile 是标准的 .net FileInfo 类型。 另请注意:这是用 0.10.3 版本测试的,因为显然我无法获得 VS2012 的 0.12.4 版本。此处的属性名称也有可能已更改。
【讨论】:
以上是关于使用 SharpCompress 识别与给定 RAR 存档关联的卷的主要内容,如果未能解决你的问题,请参考以下文章
使用 SharpCompress 库发布 WinRT 应用程序
如何使用 Sharpcompress .net 从 ZIP 存档中删除单个条目