使用QuaZip将QStream写入zip文件

时间:2012-07-13 09:24:06

标签: qt quazip

我想用QuaZip在ziparchive的文本文件中编写一个QString。我在WinXP上使用Qt Creator。使用我的代码,存档中的文本文件已创建但为空。

QDomDocument doc;
/* doc is filled with some XML-data */

zipfile = new QuaZip("test.zip");
zipfile->open(QuaZip::mdCreate);
QuaZipFile file(zipfile);
file.open(QIODevice::WriteOnly, QuaZipNewInfo("foo.xml"));

QTextStream ts ( &file );
ts << doc.toString();

file.close();
zipfile.close();

当我尝试使用QFile时,它按预期工作:

QDomDocument doc;
/* doc is filled with some XML-data */

QFile file("test.xml");
file.open(QIODevice::WriteOnly);

QTextStream ts ( &file );
ts << doc.toString();

file.close();

我在test.xml中找到了正确的内容,所以String就在那里,但不知何故QTextStream不想使用QuaZipFile。

当我用QDataStream代替QTextStream时,有一个输出,但不是正确的输出。     QDomDocument doc;     / * doc填充了一些XML数据* /

zipfile = new QuaZip("test.zip");
zipfile->open(QuaZip::mdCreate);
QuaZipFile file(zipfile);
file.open(QIODevice::WriteOnly, QuaZipNewInfo("foo.xml"));

QDataStream ts ( &file );
ts << doc.toString();

file.close();
zipfile.close();

test.zip中的foo.xml填充了一些数据,但格式错误(每个字符之间是一个额外的'nul'字符)。

如何在zip-archive的文本文件中编写String?

谢谢, 保罗

2 个答案:

答案 0 :(得分:4)

您不需要QTextStream或QDataStream将QDomDocument写入ZIP文件。

您可以执行以下操作:

QDomDocument doc;
/* doc is filled with some XML-data */

zipfile = new QuaZip("test.zip");
zipfile->open(QuaZip::mdCreate);
QuaZipFile file(zipfile);
file.open(QIODevice::WriteOnly, QuaZipNewInfo("foo.xml"));

// After .toString(), you should specify a text codec to use to encode the
// string data into the (binary) file. Here, I use UTF-8:
file.write(doc.toString().toUtf8());

file.close();
zipfile->close();

答案 1 :(得分:3)

在最初的第一个示例中,您必须刷新流:

QDomDocument doc;
/* doc is filled with some XML-data */

zipfile = new QuaZip("test.zip");
zipfile->open(QuaZip::mdCreate);
QuaZipFile file(zipfile);
file.open(QIODevice::WriteOnly, QuaZipNewInfo("foo.xml"));

QTextStream ts ( &file );
ts << doc.toString();
ts.flush();

file.close();
zipfile.close();