basic_filebuf (Clase)
Describe un búfer de la secuencia que controla la transmisión de elementos de Elemescrito, 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 archivos.Tr
Con los del elemento básico del búfer de archivos (normalmente char_traits<Elem>).
Comentarios
La clase de plantilla describe un búfer de la secuencia que controla la transmisión de elementos de Elemescrito, 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 basic_filebuf tipo se crean con un búfer interno de char * escrito sin importar char_type especificado por el parámetro de tipo Elem.Esto significa que una cadena Unicode (que contiene los caracteres de wchar_t ) se convierte en una cadena ANSI (que contiene los caracteres de char ) antes de que se escriba el búfer interno.Para almacenar cadenas Unicode en el búfer, cree un nuevo búfer de wchar_t escrito y establézcalo utilizando el método de basic_streambuf::pubsetbuf() .Para ver un ejemplo que muestre este comportamiento, vea a continuación.
Un objeto de clase basic_filebuf<Elem, Tr> almacena un puntero de archivo, que indica el objeto de FILE que controla la secuencia asociada a un archivo abierto. También almacena punteros a dos facetas de la conversión de archivos para uso de las funciones protegidas Desbordamiento y subdesbordamientomiembro. Para obtener más información, vea basic_filebuf::open.
Ejemplo
El ejemplo siguiente se muestra cómo crear un objeto de basic_filebuf<wchar_t> tipo a caracteres Unicode almacenados en el búfer interno llamando al 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();
}
Constructores
Construye un objeto de tipo basic_filebuf. |
Typedefs
Asocia un nombre de tipo al parámetro de plantilla de Elem . |
|
Crea este escribir dentro de equivalente de ámbito de basic_filebuf al tipo del mismo nombre en el ámbito de Tr . |
|
Crea este escribir dentro de equivalente de ámbito de basic_filebuf al tipo del mismo nombre en el ámbito de Tr . |
|
Crea este escribir dentro de equivalente de ámbito de basic_filebuf al tipo del mismo nombre en el ámbito de Tr . |
|
Asocia un nombre de tipo al parámetro de plantilla de Tr . |
Funciones miembro
Cerrar un archivo. |
|
Indica si un archivo está abierto. |
|
Abre un archivo. |
|
Una función virtual protegida que puede llamar cuando un nuevo carácter se incrusta en un búfer completo. |
|
La función virtual protegida de miembro intentan colocar la reproducción de un elemento en el flujo de entrada, se le hace que el elemento actual (indicado por el puntero siguiente). |
|
La función virtual protegida de miembro intenta modificar los cargos actuales para las secuencias controladas. |
|
La función virtual protegida de miembro intenta modificar los cargos actuales para las secuencias controladas. |
|
La función virtual protegida de miembro realiza un detalle de la operación a cada búfer derivado de la secuencia. |
|
Cambia el contenido de este basic_filebuf por el contenido del parámetro proporcionado de basic_filebuf . |
|
La función protegida, virtual intenta sincronizar las secuencias controladas con cualquier secuencia externa asociada. |
|
Función protegida, virtual para extraer el elemento actual del flujo de entrada. |
|
Función protegida, virtual para extraer el elemento actual del flujo de entrada. |
Requisitos
fstream <deEncabezado: >
Espacio de nombres: std
Vea también
Referencia
Seguridad para subprocesos en la biblioteca estándar de C++