伙计们,我最近正在研究libunrar
,但是当我使用RAR_OM_LIST
选项时出现错误,我可以打印出rar文件中的第一项,但之后得到了ERAR_BAD_DATA
。这是代码:
struct RAROpenArchiveData openArcData = {
.ArcName = (char *)"/Users/oxnz/Developer/Nanook/unrar/x.rar",
.OpenMode = RAR_OM_LIST,
};
HANDLE hArcData = RAROpenArchive(&openArcData);
if (openArcData.OpenResult == ERAR_SUCCESS) {
struct RARHeaderDataEx headerDataEx;
int ret;
while (ERAR_SUCCESS == (ret = RARReadHeaderEx(hArcData, &headerDataEx))) {
printf("file: [%s]\n", headerDataEx.FileName);
}
switch (ret) {
case ERAR_BAD_DATA:
printf("bad data\n");
break;
case ERAR_END_ARCHIVE:
printf("END OF ARCHIVE\n");
break;
default:
printf("unknown error: %d", ret);
break;
}
RARCloseArchive(hArcData);
}
任何信息,将不胜感激。提前致谢。
最佳答案
每次调用RARReadHeaderEx
之后,您都需要调用RARProcessFile
,即使只是跳过数据。例如。
while (ERAR_SUCCESS == (ret = RARReadHeaderEx(hArcData, &headerDataEx)))
{
printf("file: [%s]\n", headerDataEx.FileName);
if (ERAR_SUCCESS != (ret = RARProcessFile(hArcData, RAR_SKIP, NULL, NULL)))
break;
}
关于c++ - libunrar RARReadHeader始终返回ERAR_BAD_DATA,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34868048/