我遇到了这个问题,希望能找到我所有问题的答案。但我刚刚找到了我的解决方案并愿意分享。
- 如何处理 unrar.ReadHeader() 以继续拆分存档的下一个文件
如果您使用 Unrar 中的 C# 示例,则应删除IOException("File CRC Error")
inProcessFileError()
或抛出错误。如果您以读取模式打开,则文件打开错误也是如此。如果continuedOnNext == false
.
case RARError.BadData:
if (!currentFile.continuedOnNext) throw new IOException("File CRC Error");
else break;
下一个文件将是完全相同的文件名并且将成功提取(假设第 2 部分中的文件没有损坏)。请注意,如果您列出新文件,则需要在以下位置修改此语句ReadHeader()
:
// Determine if new file
if (((header.Flags & 0x01) != 0) && currentFile != null)
currentFile.ContinuedFromPrevious = true;
对此:
// Determine if new file
if ((header.Flags & 0x01) != 0) return true;
如果您不想停止 while 读取循环,则希望返回 true。
通常如何确定拆分存档的第一个文件
如果您的意思是如何确定档案是否是第一卷,您应该将 Unrar.cs 中的私有属性更改archiveFlags
为更易于访问的修饰符(例如:内部或公共)。
要检查它是否是卷/拆分存档:
bool isVolume = (RARObj.archiveFlags & RAR.ArchiveFlags.Volume) == RAR.ArchiveFlags.Volume
要检查它是否是第一个卷/拆分存档:
bool isFirstVolume = (RARObj.archiveFlags & RAR.ArchiveFlags.FirstVolume) == RAR.ArchiveFlags.FirstVolume
如何确定整个提取过程的进度(在运行时输出我的程序中的进度)
您可以使用ListFiles
获取存档文件计数并将其用作主要的存档提取过程。然后提取并创建一个事件RARObj.ExtractionProgress
以更新您拥有的任何 ProgressBar。
ExtractionProgressEventArgs e
具有PercentComplete
更新进度条的属性。我建议你分析一下 WinRAR 应用程序是如何做到的,这样你就可以更好地了解它是如何工作的。
哦还有一件事。
RAR RARObj = new Unrar(archive.path);