Невозможно прочитать архивные файлы из архива, созданного из кода - PullRequest
0 голосов
/ 22 июня 2019

Я загружаю файлы в архив, используя libzip / c ++, и пока все хорошо. Я могу открыть созданный архив с помощью клиента WinRar для Windows, распаковать архив и прочитать каждый файл без проблем.

Но при попытке прочитать некоторые файлы (по каким-то причинам находящиеся в подпапках) из архива с помощью c ++ / libzip, кажется, что libzip просто не может их найти, и моя возвращенная структура zip_file NULL. Я на 100% уверен, что пути к этим файлам верны.

Интересный факт: если я вручную распакую созданный архив и вручную перепакую его с помощью клиента WinRar, у меня не возникнет проблем при чтении архива с помощью libzip.

Я попытался получить информацию об ошибке здесь с помощью этого кода:

if (isNull(zf)) { // zf is of type - struct zip_file* -
    zip_error_t ze;
    zip_error_init(&ze);
    zip_error_code_system(&ze);
    zip_error_code_zip(&ze);
    const char* err = zip_error_strerror(&ze);
    ...
}

Коды ошибок не зарегистрированы, а сообщение err: No error.

Что здесь происходит?

1 Ответ

0 голосов
/ 22 июня 2019

Я нашел проблему с этим и решением.

При отправке файлов в подпапки с помощью libzip необходимо также создать каждый каталог отдельно в архиве с zip_dir_add(...).

Дажеесли это не произойдет, при добавлении файлов не возникнут ошибки (и, например, клиент WinRar может просматривать файлы через свои собственные каталоги), libzip не сможет читать эти файлы, если каждый каталог не был выдвинут отдельно.

TLDR:

Разобрать каждый отправленный файл на предмет его структуры каталогов и добавить каждую подпапку отдельно с помощью zip_dir_add().

...