"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como gravar a saída TiXml em um buffer de memória em vez de um arquivo?

Como gravar a saída TiXml em um buffer de memória em vez de um arquivo?

Publicado em 2024-11-16
Navegar:184

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

Criando um buffer de memória como um ARQUIVO* para saída em TiXml

Em certos cenários, a capacidade de gravar a saída TiXml em um buffer de memória em vez de um arquivo pode ser útil. No entanto, não há funcionalidade direta no TiXml para lidar com isso.

Solução: usando funções POSIX

Para superar essa limitação, o POSIX fornece duas funções que permitem criar um buffer de memória como um FILE*:

  • fmemopen: Cria um objeto FILE* a partir de um buffer de memória existente.
  • open_memstream: Cria um buffer de memória e um objeto FILE* simultaneamente.

Exemplo de uso de 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);
}

Neste exemplo, a função fmemopen usa o buffer de memória e seu tamanho como argumentos, junto com o modo de arquivo "w" para gravação. O método doc.Print então grava o documento XML no buffer de memória por meio do objeto fp FILE*.

Exemplo usando open_memstream:

#include 
#include 

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

Neste exemplo, a função open_memstream não é usada explicitamente, mas a biblioteca sstream fornece funcionalidade semelhante. Ele cria um objeto buffer de string (buffer) e um objeto FILE (&buffer) simultaneamente. O método doc.Print grava o documento XML no buffer de memória por meio do objeto FILE. O conteúdo do buffer de memória pode então ser acessado como uma string.

Ao usar essas funções POSIX, você pode criar efetivamente um buffer de memória que se comporta como um objeto FILE*, permitindo que o TiXml envie XML diretamente para a memória buffer.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3