0

我正在尝试使用 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;
}

输出:

  1. 没有错误

  2. 没有错误

  3. 无效的论点 ...

  4. 读取错误:没有这样的文件或目录

当我尝试创建 zip 时,尝试将文件添加到 zip 后,错误值返回“无效参数”。

4

1 回答 1

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)

于 2019-11-20T07:34:57.890 回答