Cpp заставляет писать zip, используя libzip

Я использую шапку zip.hpp (можно найти здесь https://markand.bitbucket.io/libzip/index.html или здесь http://hg.markand.fr/libzip/file), чтобы заархивировать некоторые файлы.

Чтобы потом удалить необработанные файлы, я использую remove("myfile.txt"),

По-видимому, zip.hpp архивирует файлы в конце времени выполнения, поэтому он не может найти файл и не создает zip-папку. Если я уйду remove("myfile.txt"), все работает отлично, за исключением того, что у меня есть пара файлов, которые я хотел бы иметь только в заархивированном виде.

Есть ли у вас какие-либо идеи о том, как заставить libzip записывать zip-файлы?
Я ожидаю, если я удалю archive-например, это должно заставить создание, но, видимо, libzip::Archive-класс не имеет деструктора (по крайней мере, я не могу найти его и delete archive кидает много ошибок)

Мой основной код выглядит так:

#include <fstream>
#include <zip.h>
#include "lib/zip.hpp"

int main () {

libzip::Archive archive("output.zip", ZIP_CREATE);
std::ofstream outfile ("myfile.txt");
outfile << "Hello World\n";
outfile.close();

archive.add(libzip::source::file("myfile.txt"), "myfile2.txt");

// delete archive; // throws an error...

// remove("myfile.txt");
// if left out, output.zip gets created otherwise nothing is createdreturn 0;

}

0

Решение

libzip::Archive напишет его содержимое, когда оно выходит из области видимости. Поэтому все, что вам нужно сделать, это ввести дополнительную область перед удалением файла.

#include <fstream>
#include <zip.h>
#include "lib/zip.hpp"
int main () {

{ // Additional scope
libzip::Archive archive("output.zip", ZIP_CREATE);
std::ofstream outfile ("myfile.txt");
outfile << "Hello World\n";
outfile.close();
archive.add(libzip::source::file("myfile.txt"), "myfile2.txt");
} // Archive is written now.

remove("myfile.txt");

return 0;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]