我正在尝试使用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代码就得出了一些想法,这是可行的!