Libzip - ошибка: ошибка при открытии архива: нет ошибки

Я пытаюсь найти решение, чтобы решить проблему; На самом деле, я пишу свой собственный инструмент для сохранения, используя libzip в C++ для сжатия файлов.

Абсолютно не закончен, но я хотел сделать несколько тестов, а затем я делаю и получаю "смешную" ошибку из журнала.

Вот моя функция:

void save(std::vector<std::string> filepath, std::string savepath){
int err;

savepath += time(NULL);
zip* saveArchive = zip_open(savepath.c_str(), ZIP_CREATE , &err);
if(err != ZIP_ER_OK) throw xif::sys_error("Error while opening the archive", zip_strerror(saveArchive));
for(int i = 0; i < filepath.size(); i++){
    if(filepath[i].find("/") == std::string::npos){}
    if(filepath[i].find(".cfg") == std::string::npos){
        err = (int) zip_file_add(saveArchive, filepath[i].c_str(), NULL, NULL);
        if(err == -1) throw xif::sys_error("Error while adding the files", zip_strerror(saveArchive));
    }

}

if(zip_close(saveArchive) == -1) throw xif::sys_error("Error while closing the archive", zip_strerror(saveArchive));
}

Я получаю => Error : Error while opening the archive : No errorИ, конечно же, у меня не было никакого написанного.zip.

Если бы вы могли мне помочь, спасибо вам!

1 ответ

Решение

Документация для zip_open говорит, что это только устанавливает *errorp если открыть не удастся. Либо тест для saveArchive == nullptr или инициализировать err в ZIP_ER_OK.

PS поиск '/' ничего не делает. Вы хотели поставить continue в этом блоке?

Другая проблемная строка:

    savepath += time(NULL);

Если это стандарт time функция, которая возвращает время в секундах с начала эпохи. Это, вероятно, будет усечено до символа, а затем этот символ добавляется к имени файла. Это приведет к появлению странных символов в имени файла! Я предлагаю использовать std::chrono преобразовать в текст.

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