Libzip: Как мне заархивировать папку, в которой есть файлы?

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

 zip_file_add(archive, file, s, ZIP_FL_OVERWRITE)

куда file в основном это небольшой путь от папки к файлу, а не только имя файла. Таким образом, я могу заархивировать папку со всеми файлами внутри. Но я думаю, именно поэтому он падает, так как для архивации папки, есть zip_dir_add(), но я не могу найти продуктивный способ использовать их обоих. Я могу использовать их, чтобы добавить и папку, и файл в архив, но это будет не файл внутри папки, а только файл и папка.

Самое интересное, если я заархивирую эту папку с помощью libzip, используя zip_file_add() как указано выше, даже если происходит сбой, когда я разархивирую его с помощью libzip, это не происходит, когда я разархивирую его с помощью Ark (из KDE). Но если я заархивирую эту папку с помощью Ark, то распаковка с помощью libzip работает.

0 ответов

Я думаю, что использовать строго не обязательно zip_dir_add()если вы не хотите создать в архиве пустой каталог. Но также можно использовать его, если вы также собираетесь помещать файлы в каталог. Это делается с помощьюzip_file_add() и проходя как name параметр полный путь как относительный путь от корня архива.

Например (без проверки ошибок)

zip_dir_add(archive, "Directory 1", ZIP_FL_ENC_UTF_8);
...
zip_file_add(archive, "Directory 1/novel.txt", s, ZIP_FL_OVERWRITE | ZIP_FL_ENC_UTF_8);

Вы также можете сравнить свой код с https://gist.github.com/clalancette/bb5069a09c609e2d33c9858fcc6e170e

Если происходит сбой при разархивировании, но не при использовании стороннего инструмента, возможно, это ошибка в вашем разархивированном коде, а не в почтовом индексе?

Другие вопросы по тегам