libunrar RARReadHeader всегда возвращает ERAR_BAD_DATA

ребята, я недавно работаю над 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);
}

Будем благодарны вам за любую информацию. заранее спасибо.

2

Решение

После каждого звонка 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;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]