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
преобразовать в текст.