伙计们,我最近正在研究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/

10-13 02:32