gpt4 book ai didi

c++ - Cpp 使用 libzip 强制写入 zip

转载 作者:行者123 更新时间:2023-11-28 05:18:52 25 4
gpt4 key购买 nike

我正在使用标题 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-instance,它应该强制创建,但显然 libzip::Archive-class 没有析构函数(至少我找不到一个并且 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 created


return 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;
}

关于c++ - Cpp 使用 libzip 强制写入 zip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41971698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com