2016-05-21 3 views
0

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

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

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

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

documentation для zip_open говорит, что он устанавливает *errorp, если сбой не работает. Любой тест для saveArchive == nullptr или инициализировать err до ZIP_ER_OK.

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

Другой проблематичной линия:

savepath += time(NULL); 

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

+0

Я не получил эту глупую «ошибку», но она также не создает .zip-файл ... Поиск '/' еще не реализован. Спасибо за ответ. – eldten

+0

Пройдите через него в отладчике. Есть что-нибудь в векторе? Что добавляет возврат? –

+0

Я думаю, что я не понимал, как работает zip_file_add. Действительно, функция не сжимает и не добавляет мой файл в архив, но он делает только путь внутри. Спасибо за помощь. – eldten

Смежные вопросы