Mac 10.9 使用 Qt 5.4 和 Clang(64 位)时出现 Zipios 错误

Zipios error on Mac 10.9 using Qt 5.4 and Clang(64 bit)

我正在尝试使用 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 代码给出了一些想法,这就是工作原理!