2

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で正しいコンテンツを見つけたので、文字列はそこにありますが、どういうわけかQTextStreamはQuaZipFileで動作したくありません.

QTextStream の代わりに QDataStream を使用すると、出力はありますが、正しいものではありません。QDomDocument ドキュメント; /* 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 にはいくつかのデータが含まれていますが、フォーマットが間違っています (各文字の間に余分な「ヌル」文字があります)。

zipアーカイブのテキストファイルに文字列を書き込むにはどうすればよいですか?

ありがとう、ポール

4

2 に答える 2

4

QDomDocumentをZIPファイルに書き込むためにQTextStreamまたはQDataStreamは必要ありません。

あなたは単に次のことをすることができます:

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();
于 2012-07-13T21:02:32.333 に答える
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();
于 2012-08-22T13:57:07.697 に答える