【问题标题】:Zipios error on Mac 10.9 using Qt 5.4 and Clang(64 bit)使用 Qt 5.4 和 Clang(64 位)的 Mac 10.9 上的 Zipios 错误
【发布时间】:2015-11-25 20:06:35
【问题描述】:

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

【问题讨论】:

  • 您应该将其作为答案发布
  • 回答我自己的问题?是否允许,我不知道:P
  • 当然是 :) (有些人甚至提出几乎不可能的问题只是为了提供答案!)

标签: c++ macos qt clang


【解决方案1】:

我能够修复错误。下面的代码更改对我有用-

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

问题是我没有正确取消引用指针,仔细查看 zipios 代码给出了一些想法,这就是有效的方法!

【讨论】:

  • 您现在可以解释有什么好处,更改如何解决您的解决方案,错误是什么......但这取决于您:)
猜你喜欢
  • 2015-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多