Compartir a través de


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();
}
  
  
  
  

tzf8k3z8.collapse_all(es-es,VS.110).gifConstructores

basic_filebuf

Construye un objeto de tipo basic_filebuf.

tzf8k3z8.collapse_all(es-es,VS.110).gifTypedefs

char_type

Asocia un nombre de tipo con el Elem parámetro de plantilla.

int_type

Hace que este tipo dentro de basic_filebufde alcance equivalente al tipo del mismo nombre en el Tr ámbito.

off_type

Hace que este tipo dentro de basic_filebufde alcance equivalente al tipo del mismo nombre en el Tr ámbito.

pos_type

Hace que este tipo dentro de basic_filebufde alcance equivalente al tipo del mismo nombre en el Tr ámbito.

traits_type

Asocia un nombre de tipo con el Tr parámetro de plantilla.

tzf8k3z8.collapse_all(es-es,VS.110).gifFunciones miembro

Cerrar

Cierra un archivo.

is_open

Indica si un archivo está abierto.

abrir

Se abre un archivo.

desbordamiento

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

pbackfail

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

seekoff

La función miembro virtual protegido intenta modificar las posiciones actuales de las secuencias controladas.

seekpos

La función miembro virtual protegido intenta modificar las posiciones actuales de las secuencias controladas.

setbuf

La función miembro virtual protegido realiza un particular de operación para cada búfer de secuencia derivada.

Swap

Intercambia el contenido de este basic_filebuf para el contenido de los basic_filebuf parámetro.

sincronización

Función protegido, virtual intenta sincronizar las secuencias controladas con cualquier flujo externo asociado.

uflow

Protegido, la función virtual para extraer el elemento actual de la secuencia de entrada.

subdesbordamiento

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

programación iostream

convenciones de iostreams

Otros recursos

miembros de <fstream>

miembros de basic_filebuf