ребята, я недавно работаю над 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;
}
Других решений пока нет …