2

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

任何信息,将不胜感激。提前致谢。

4

1 回答 1

1

每次调用后,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;
}
于 2016-01-19T03:42:42.627 回答