我使用libzip库创建zip文件。
list<string> ListOfFiles;
ListOfFiles.push_back("file1");
ListOfFiles.push_back("file2");
ListOfFiles.push_back("file3");
...
createZip(const char* destination)
{
int err;
zip *archive = zip_open(destination, ZIP_CREATE, &err);
cout << "1. " << zip_strerror(archive) << endl;
for (list<string>::iterator iter = ListOfFiles.begin(), end = ListOfFiles.end(); iter != end; iter++)
{
zip_source *source = zip_source_file(archive,iter->c_str(),0,0);
cout << "2. " << zip_strerror(archive) << endl;
index = zip_file_add(archive, iter->c_str(), source, ZIP_FL_OVERWRITE);
cout << "3. " << zip_strerror(archive) << endl;
}
zip_close(archive);
cout << "4. " << zip_strerror(archive) << endl;
}
输出:
无错误
无错误
无效的参数......
读取错误:没有此类文件或目录
当我尝试创建zip时,错误值返回&#34;无效的参数&#34;之后我尝试添加文件到zip。
答案 0 :(得分:0)
需要进一步的帮助,这是对我有用的代码。
int main() {
int err = 0;
ifstream fs, fs1;
fs.open("my_test.txt", std::ios::binary);
fs1.open("f 2.pdf", std::ios::binary);
std::string content((std::istreambuf_iterator<char>(fs)), (std::istreambuf_iterator<char>()));
std::string content1((std::istreambuf_iterator<char>(fs1)), (std::istreambuf_iterator<char>()));
zip* z = zip_open("foo.zip", ZIP_CREATE, &err);
zip_source_t* zs;
zs = zip_source_buffer(z, content.c_str(), content.length(), 0);
zip_file_add(z, "test.txt", zs, ZIP_FL_OVERWRITE | ZIP_FL_ENC_UTF_8);
zs = zip_source_buffer(z, content1.c_str(), content1.length(), 0);
zip_file_add(z, "test.pdf", zs, ZIP_FL_OVERWRITE | ZIP_FL_ENC_UTF_8);
zip_close(z);}
我以二进制模式打开了2个文件(一个txt和一个pdf),并读取了整个文件。我已将其数据存储到两个string contents
中。接下来,我创建了zip文件(foo.zip),下一步是创建源缓冲区。第一个参数是zip文件,第二个是内容,第三个是要写入的内容的长度。最后,我们在zip文件中添加缓冲区。请注意zip_file_add
使用提供的名称创建新文件(my_test.txt-> text.txt和f 2.pdf-> test.pdf)