C++ 使用Qt5.4和Clang(64位)在Mac 10.9上出现Zipios错误
我尝试使用ZiPIOS++(V2.1.0)C++库来在MAC 10.9上压缩文件。下面是我将文件集合压缩到存档中的代码C++ 使用Qt5.4和Clang(64位)在Mac 10.9上出现Zipios错误,c++,macos,qt,clang,C++,Macos,Qt,Clang,我尝试使用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.
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();
我能纠正这个错误。下面的代码更改对我有用-
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代码就有了一些想法,这就是有效的方法 你应该把它作为一个答案,而不是回答我自己的问题?允许这样做吗,我不知道:PSure它是:)(有些人甚至提出几乎不可能的问题只是为了提供答案!)您现在可以解释一下好处是什么,更改如何修复您的解决方案,错误是什么。。。但这取决于你:)