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
Constrói um objeto de tipo basic_filebuf. |
Typedefs
Associa um nome de tipo com o parâmetro do modelo de Elem . |
|
Faz este tipo no equivalente do escopo de basic_filebuf o tipo de mesmo nome em Tr definir o escopo. |
|
Faz este tipo no equivalente do escopo de basic_filebuf o tipo de mesmo nome em Tr definir o escopo. |
|
Faz este tipo no equivalente do escopo de basic_filebuf o tipo de mesmo nome em Tr definir o escopo. |
|
Associa um nome de tipo com o parâmetro do modelo de Tr . |
Funções de membro
Fecha um arquivo. |
|
Indica se um arquivo está aberto. |
|
Abre um arquivo. |
|
Uma função protegida virtual que pode ser chamada quando um novo caractere é inserido em um buffer cheio. |
|
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). |
|
As tentativas virtuais protegidas da função de membro para alterar os cargos atuais dos fluxos controladas. |
|
As tentativas virtuais protegidas da função de membro para alterar os cargos atuais dos fluxos controladas. |
|
A função de membro virtual protegida executa um detalhe da operação cada buffer derivado do fluxo. |
|
Troca o conteúdo desse basic_filebuf o conteúdo do parâmetro fornecido de basic_filebuf . |
|
Tentativas protegidas, virtuais da função para sincronizar os fluxos controlados com alguns fluxos externos associados. |
|
Função protegida, virtual para extrair o elemento atual do fluxo de entrada. |
|
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++