ホームページ >バックエンド開発 >C++ >TiXml 出力をファイルではなくメモリ バッファに書き込むにはどうすればよいですか?

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

Susan Sarandon
Susan Sarandonオリジナル
2024-10-29 22:04:30353ブラウズ

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

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

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

解決策: POSIX 関数の使用

この制限を克服するために、POSIX には次のような関数を作成できる 2 つの関数が用意されています。 FILE* としてのメモリ バッファ:

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

fmemopen の使用例:

<code class="c++">#include <stdio.h>

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);
}</code>

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

open_memstream の使用例:

<code class="c++">#include <iostream>
#include <sstream>

void writeXmlToMemoryBuffer(TiXmlDocument& doc) {
    std::ostringstream buffer;
    doc.Print(&buffer);
    std::cout << buffer.str();
}</code>

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

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

以上がTiXml 出力をファイルではなくメモリ バッファに書き込むにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。