解压缩文件不会导致Qt5发现存档错误

时间:2014-01-30 18:30:11

标签: qt zip qt5

我已经实现了一个创建zip文件的代码。 zip文件成功创建但是当我手动(没有代码)尝试通过解压缩来检查zip文件的内容时,我收到错误说No archive found并且解压缩过程停止..为什么会出现此问题

这是我的代码

#include <QCoreApplication>
#include <QByteArray>
#include <QBitArray>
#include <QString>
#include <QDebug>
#include <QFile>

void Zip(QString filename , QString zipfilename);

int main(int argc, char *argv[]){
  QCoreApplication a(argc, argv);

  Zip("C:\\programs\\zipping_qt\\sample.txt",
      "C:\\programs\\zipping_qt\\samples.zip");
  qDebug() << "Done zipping";

  return a.exec();
}

void  Zip (QString filename , QString zipfilename){
  QFile infile(filename);
  QFile outfile(zipfilename);
  infile.open(QIODevice::ReadOnly);
  outfile.open(QIODevice::WriteOnly);
  QByteArray uncompressedData = infile.readAll();
  QByteArray compressedData = qCompress(uncompressedData,9);
  outfile.write(compressedData);
  infile.close();
  outfile.close();
}  

1 个答案:

答案 0 :(得分:3)

qCompress不会创建zip文件。它使用zlib创建压缩数据块。这些块只能通过使用qUncompress或直接调用zlib来直接解压缩。没有标准的独立实用程序可以执行此类解压缩。甚至gunzip都没有,因为zlib样式的API使用的标头不同于gzip。

您的代码还有一些其他的挑剔:

  1. 如果您不需要运行事件循环,则无需调用a.exec()

  2. 没有必要显式关闭文件,因为QFile是一个合适的C ++类并实现了RAII。

  3. 您永远不会检查openreadAllwrite是否成功。