basic_filebuf Class
Describe un búfer de la secuencia que controla la transmisión de los elementos de tipo Elem, cuyos rasgos de carácter se determinan mediante la clase Tr, a y desde una secuencia de elementos almacenados en un archivo externo.
template <class Elem, class Tr = char_traits<Elem> >
class basic_filebuf : public basic_streambuf<Elem, Tr>
Parámetros
Elem
El elemento básico del búfer de archivo.Tr
Los rasgos de elemento básico del búfer de archivo (normalmente char_traits<Elem>).
Comentarios
La clase de plantilla describe un búfer de la secuencia que controla la transmisión de los elementos de tipo Elem, cuyos rasgos de carácter se determinan mediante la clase Tr, a y desde una secuencia de elementos almacenados en un archivo externo.
[!NOTA]
Los objetos de tipo basic_filebuf se crean con un búfer interno de tipo char * , independientemente de la char_type especificado por el parámetro de tipo Elem.Esto significa que una cadena Unicode (que contiene wchar_t caracteres) se convertirá en una cadena ANSI (que contiene char caracteres) antes de que se escribe en el búfer interno.Para almacenar las cadenas Unicode en el búfer, crear un nuevo búfer de tipo wchar_t y establecerlo mediante la basic_streambuf::pubsetbuf() método.Para ver un ejemplo que se muestra este comportamiento, consulte a continuación.
An object of class basic_filebuf<Elem, Tr> almacena un puntero de archivo, que designa el FILE objeto que controla la secuencia asociada a un archivo abierto.También almacena punteros a dos aspectos de conversión de archivo para su uso por las funciones miembro protegido desbordamiento y subdesbordamiento.Para obtener más información, vea basic_filebuf::open.
Ejemplo
En el ejemplo siguiente se muestra cómo hacer que un objeto de tipo basic_filebuf<wchar_t> para almacenar caracteres Unicode en su búfer interno mediante una llamada a la pubsetbuf() método.
// 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();
}
Constructores
Construye un objeto de tipo basic_filebuf. |
Typedefs
Asocia un nombre de tipo con el Elem parámetro de plantilla. |
|
Hace que este tipo dentro de basic_filebufde alcance equivalente al tipo del mismo nombre en el Tr ámbito. |
|
Hace que este tipo dentro de basic_filebufde alcance equivalente al tipo del mismo nombre en el Tr ámbito. |
|
Hace que este tipo dentro de basic_filebufde alcance equivalente al tipo del mismo nombre en el Tr ámbito. |
|
Asocia un nombre de tipo con el Tr parámetro de plantilla. |
Funciones miembro
Cierra un archivo. |
|
Indica si un archivo está abierto. |
|
Se abre un archivo. |
|
Una función virtual protegida que se puede llamar cuando se inserta un nuevo carácter en un búfer completo. |
|
La función miembro virtual protegido intenta colocar un elemento en la secuencia de entrada, a continuación, convertirlo en el elemento actual (señalado por el puntero siguiente). |
|
La función miembro virtual protegido intenta modificar las posiciones actuales de las secuencias controladas. |
|
La función miembro virtual protegido intenta modificar las posiciones actuales de las secuencias controladas. |
|
La función miembro virtual protegido realiza un particular de operación para cada búfer de secuencia derivada. |
|
Intercambia el contenido de este basic_filebuf para el contenido de los basic_filebuf parámetro. |
|
Función protegido, virtual intenta sincronizar las secuencias controladas con cualquier flujo externo asociado. |
|
Protegido, la función virtual para extraer el elemento actual de la secuencia de entrada. |
|
Protegido, la función virtual para extraer el elemento actual de la secuencia de entrada. |
Requisitos
Encabezado: <fstream>
Espacio de nombres: std
Vea también
Referencia
Seguridad para subprocesos de la biblioteca estándar de C++