我基本上是尝试使用QuaZip从zip文件中提取Mac应用程序。我使用的代码是:
QuaZip zip("file.zip");
qDebug() << zip.open(QuaZip::mdUnzip);
QuaZipFile file(&zip);
QFile out("application.app");
out.open(QIODevice::WriteOnly);
for(bool f=zip.goToFirstFile(); f; f=zip.goToNextFile()) {
file.open(QIODevice::ReadOnly);
//same functionality as QIODevice::readData() -- data is a char*, maxSize is qint64
char c;
while (file.getChar(&c)) out.putChar(c);
file.close();
}
out.flush();
out.close();
zip.close();
如果我尝试启动提取的应用,则会收到一条错误消息,指出"无法打开应用程序,因为不再支持经典环境"。我试图使.app可执行文件,但它仍然不起作用。我不知道任何其他简单的方法来使用Qt提取应用程序。
我用普通的存档器提取了它,应用程序工作了。
我对 QuaZip 不是很熟悉,但看起来您正在尝试将整个存档提取到一个名为"application.app"的单个文件中,这是非常严重的错误。应用程序实际上是文件夹,而不是文件 - Finder 只是显示文件夹(名称以".app"结尾),就好像它是单个文件一样。
如果你能找到一个使用 QuaZip 提取 ZIP 文件的例子,你应该能够使用该代码,基本上未经修改(可能除了__MACOSX元数据)。
使用 QProcess 或 system() 从您的应用程序中调用解压缩可能更容易。
unzip -q <path-to-zip> -d <path-to-destionation>