「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > TiXml 出力をファイルではなくメモリ バッファに書き込むにはどうすればよいですか?

TiXml 出力をファイルではなくメモリ バッファに書き込むにはどうすればよいですか?

2024 年 11 月 16 日に公開
ブラウズ:991

How to Write TiXml Output to a Memory Buffer Instead of a File?

TiXml の出力用のファイル* としてメモリ バッファを作成する

特定のシナリオでは、TiXml 出力をメモリ バッファに書き込む機能ファイルの代わりに使用すると便利です。ただし、TiXml にはこれを処理する直接機能はありません。

解決策: POSIX 関数の使用

この制限を克服するために、POSIX には次の関数を作成できる 2 つの関数が用意されています。 FILE*:

  • fmemopen: としてのメモリ バッファ FILE* オブジェクトを作成します既存のメモリ バッファ。
  • open_memstream: メモリ バッファと FILE* オブジェクトを同時に作成します。

fmemopen:

の使用例]
#include 

void writeXmlToMemoryBuffer(TiXmlDocument& doc) {
    // Create a memory buffer
    char buffer[1024];

    // Open the buffer as a FILE* object
    FILE* fp = fmemopen(buffer, sizeof(buffer), "w");

    // Write the XML document to the memory buffer through the FILE* object
    doc.Print(fp);

    // Close the FILE* object
    fclose(fp);
}

この例では、 fmemopen 関数は、書き込み用のファイル モード "w" とともに、メモリ バッファ バッファとそのサイズを引数として受け取ります。次に、doc.Print メソッドは、fp FILE* オブジェクトを介して XML ドキュメントをメモリ バッファに書き込みます。

open_memstream の使用例:

#include 
#include 

void writeXmlToMemoryBuffer(TiXmlDocument& doc) {
    std::ostringstream buffer;
    doc.Print(&buffer);
    std::cout 

この例では、open_memstream 関数は明示的に使用されていませんが、sstream ライブラリは同様の機能を提供します。文字列バッファ オブジェクト (buffer) と FILE オブジェクト (&buffer) を同時に作成します。 doc.Print メソッドは、FILE オブジェクトを通じて XML ドキュメントをメモリ バッファに書き込みます。メモリ バッファの内容は文字列としてアクセスできます。

これらの POSIX 関数を使用すると、FILE* オブジェクトのように動作するメモリ バッファを効果的に作成でき、TiXml が XML をメモリに直接出力できるようになります。バッファ。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3