Compartir a través de


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

basic_filebuf

Construye un objeto de tipo basic_filebuf.

Typedefs

char_type

Asocia un nombre de tipo al parámetro de plantilla de Elem .

int_type

Crea este escribir dentro de equivalente de ámbito de basic_filebuf al tipo del mismo nombre en el ámbito de Tr .

off_type

Crea este escribir dentro de equivalente de ámbito de basic_filebuf al tipo del mismo nombre en el ámbito de Tr .

pos_type

Crea este escribir dentro de equivalente de ámbito de basic_filebuf al tipo del mismo nombre en el ámbito de Tr .

traits_type

Asocia un nombre de tipo al parámetro de plantilla de Tr .

Funciones miembro

cerrar

Cerrar un archivo.

is_open

Indica si un archivo está abierto.

OPEN

Abre un archivo.

desbordamiento

Una función virtual protegida que puede llamar cuando un nuevo carácter se incrusta en un búfer completo.

pbackfail

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).

seekoff

La función virtual protegida de miembro intenta modificar los cargos actuales para las secuencias controladas.

seekpos

La función virtual protegida de miembro intenta modificar los cargos actuales para las secuencias controladas.

setbuf

La función virtual protegida de miembro realiza un detalle de la operación a cada búfer derivado de la secuencia.

Intercambio

Cambia el contenido de este basic_filebuf por el contenido del parámetro proporcionado de basic_filebuf .

sincronización

La función protegida, virtual intenta sincronizar las secuencias controladas con cualquier secuencia externa asociada.

uflow

Función protegida, virtual para extraer el elemento actual del flujo de entrada.

subdesbordamiento

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++

Programación con iostream

Convenciones de iostreams

Otros recursos

miembros de <fstream>

miembros de basic_filebuf