>백엔드 개발 >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는 다음을 생성할 수 있는 두 가지 기능을 제공합니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.