Compartilhar via


Classe basic_filebuf

Descreve um buffer de fluxo que controla a transmissão de elementos de tipo Elem, cujos características de caractere são determinados pela classe Tr, para uma sequência de elementos armazenados em um arquivo externo.

template <class Elem, class Tr = char_traits<Elem> >
    class basic_filebuf : public basic_streambuf<Elem, Tr>

Parâmetros

  • Elem
    O elemento básico do buffer do arquivo.

  • Tr
    As características do elemento básico do buffer do arquivo (normalmente char_traits<Elem>).

Comentários

A classe do modelo descreve um buffer de fluxo que controla a transmissão de elementos de tipo Elem, cujos características de caractere são determinados pela classe Tr, para uma sequência de elementos armazenados em um arquivo externo.

Dica

Os objetos do tipo basic_filebuf são criados por um buffer interno do tipo char * independentemente de char_type especificado pelo parâmetro de tipo Elem.Isso significa que uma cadeia de caracteres Unicode (que contém caracteres de wchar_t ) será convertida em uma cadeia de caracteres ANSI (que contém caracteres de char ) antes de ser gravado no buffer interno.Para armazenar as cadeias de caracteres Unicode no buffer, crie um novo buffer do tipo wchar_t e defina-o que usa o método de basic_streambuf::pubsetbuf() .Para ver um exemplo que demonstra este comportamento, consulte abaixo.

Um objeto da classe basic_filebuf<Elem, Tr> armazena um ponteiro de arquivo, que designa o objeto de FILE que controlam o fluxo associado a um arquivo aberto. Também armazena ponteiros a duas facetas de conversão de arquivo para o uso das funções de membro estouro protegidas e estouro negativo. Para obter mais informações, consulte basic_filebuf::open.

Exemplo

O exemplo a seguir demonstra como forçar um objeto do tipo basic_filebuf<wchar_t> para armazenar caracteres Unicode no buffer interno chamando o método de pubsetbuf() .

// unicode_basic_filebuf.cpp
// compile with: /EHsc

#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#include <memory.h>
#include <string.h>

#define IBUFSIZE 16

using namespace std;

void hexdump(const string& filename);

int main()
{
    wchar_t* wszHello = L"Hello World";
    wchar_t wBuffer[128];

    basic_filebuf<wchar_t> wOutFile;

    // Open a file, wcHello.txt, then write to it, then dump the
    // file's contents in hex
    wOutFile.open("wcHello.txt",
        ios_base::out | ios_base::trunc | ios_base::binary);
    if(!wOutFile.is_open())
    {
        cout << "Error Opening wcHello.txt\n";
        return -1;
    }
    wOutFile.sputn(wszHello, (streamsize)wcslen(wszHello));
    wOutFile.close();
    cout << "Hex Dump of wcHello.txt - note that output is ANSI chars:\n";
    hexdump(string("wcHello.txt"));

    // Open a file, wwHello.txt, then set the internal buffer of
    // the basic_filebuf object to be of type wchar_t, then write
    // to the file and dump the file's contents in hex
    wOutFile.open("wwHello.txt",
        ios_base::out | ios_base::trunc | ios_base::binary);
    if(!wOutFile.is_open())
    {
        cout << "Error Opening wwHello.txt\n";
        return -1;
    }
    wOutFile.pubsetbuf(wBuffer, (streamsize)128);
    wOutFile.sputn(wszHello, (streamsize)wcslen(wszHello));
    wOutFile.close();
    cout << "\nHex Dump of wwHello.txt - note that output is wchar_t chars:\n";
    hexdump(string("wwHello.txt"));

    return 0;
}

// dump contents of filename to stdout in hex
void hexdump(const string& filename)
{
    fstream ifile(filename.c_str(),
        ios_base::in | ios_base::binary);
    char *ibuff = new char[IBUFSIZE];
    char *obuff = new char[(IBUFSIZE*2)+1];
    int i;

    if(!ifile.is_open())
    {
        cout << "Cannot Open " << filename.c_str()
             << " for reading\n";
        return;
    }
    if(!ibuff || !obuff)
    {
        cout << "Cannot Allocate buffers\n";
        ifile.close();
        return;
    }

    while(!ifile.eof())
    {
        memset(obuff,0,(IBUFSIZE*2)+1);
        memset(ibuff,0,IBUFSIZE);
        ifile.read(ibuff,IBUFSIZE);

        // corner case where file is exactly a multiple of
        // 16 bytes in length
        if(ibuff[0] == 0 && ifile.eof())
            break;

        for(i = 0; i < IBUFSIZE; i++)
        {
            if(ibuff[i] >= ' ')
                obuff[i] = ibuff[i];
            else
                obuff[i] = '.';

            cout << setfill('0') << setw(2) << hex
                 << (int)ibuff[i] << ' ';
        }
        cout << "  " << obuff << endl;
    }
    ifile.close();
}
  

Construtores

basic_filebuf

Constrói um objeto de tipo basic_filebuf.

Typedefs

char_type

Associa um nome de tipo com o parâmetro do modelo de Elem .

int_type

Faz este tipo no equivalente do escopo de basic_filebuf o tipo de mesmo nome em Tr definir o escopo.

off_type

Faz este tipo no equivalente do escopo de basic_filebuf o tipo de mesmo nome em Tr definir o escopo.

pos_type

Faz este tipo no equivalente do escopo de basic_filebuf o tipo de mesmo nome em Tr definir o escopo.

traits_type

Associa um nome de tipo com o parâmetro do modelo de Tr .

Funções de membro

término

Fecha um arquivo.

is_open

Indica se um arquivo está aberto.

aberto

Abre um arquivo.

estouro

Uma função protegida virtual que pode ser chamada quando um novo caractere é inserido em um buffer cheio.

pbackfail

As tentativas virtuais protegidas da função de membro para colocar a parte de um elemento no fluxo de entrada, fazem-lhe no elemento atual (apontada pelo ponteiro seguir).

seekoff

As tentativas virtuais protegidas da função de membro para alterar os cargos atuais dos fluxos controladas.

seekpos

As tentativas virtuais protegidas da função de membro para alterar os cargos atuais dos fluxos controladas.

setbuf

A função de membro virtual protegida executa um detalhe da operação cada buffer derivado do fluxo.

Troca

Troca o conteúdo desse basic_filebuf o conteúdo do parâmetro fornecido de basic_filebuf .

sincronização

Tentativas protegidas, virtuais da função para sincronizar os fluxos controlados com alguns fluxos externos associados.

uflow

Função protegida, virtual para extrair o elemento atual do fluxo de entrada.

estouro negativo

Função protegida, virtual para extrair o elemento atual do fluxo de entrada.

Requisitos

fstream <deCabeçalho: >

Namespace: std

Consulte também

Referência

Segurança de threads na Biblioteca Padrão C++

Programação iostream

Convenções iostreams

Outros recursos

<fstream> Membros

os membros do basic_filebuf