我正在尝试使用Zipios ++(v2.1.0)C++库在Mac 10.9上压缩文件。以下是我的代码,用于将文件的集合压缩到存档中。

zipios::ZipFile zf;
zipios::DirectoryCollection dirCollection(<folder with all files>);
zipios::DirectoryCollection finalCollection;

zipios::FileEntry::vector_t files = dirCollection.entries();

// selecting only the necessary files
for(auto it = files.begin(); it != files.end(); ++it)
{
    // THIS IS WHERE I GET AN ERROR
    zipios::DirectoryEntry dirEntry = dynamic_cast<zipios::DirectoryEntry>(**it);
    if(arrFiles.contains(QString::fromStdString(dirEntry.getFileName())))
        finalCollection.addEntry(*(*it));
}

std::filebuf fb;
fb.open (strFileName.toStdString(), std::ios::out);
std::ostream os(&fb);
zf.saveCollectionToArchive(os, finalCollection);
fb.close();
zf.close();

我需要对文件夹中的文件进行迭代,如果它们与要包含的文件列表匹配,则将它们添加到finalCollection中进行归档。但是我无法正确投射它。有没有人有使用Zipios将多个文件压缩到一个文件的示例代码?关于以下代码的任何建议都将有所帮助。谢谢。

更新:
我能够解决该错误。下面的代码更改为我工作-
for(auto entry(files.begin()); entry != files.end(); ++entry)
{
    if(!(*entry)->isDirectory())
    {
      if(arrFiles.contains(QString::fromStdString((*entry)->getFileName())))
        finalCollection.addEntry(*(*entry));
    }
}

最佳答案

我能够解决该错误。下面的代码更改为我工作-

for(auto entry(files.begin()); entry != files.end(); ++entry)
{
    if(!(*entry)->isDirectory())
    {
      if(arrFiles.contains(QString::fromStdString((*entry)->getFileName())))
        finalCollection.addEntry(*(*entry));
    }
}

问题是我没有正确地取消引用指针,仔细看一下zipios代码就得出了一些想法,这是可行的!

10-08 06:40