Condividi tramite


basic_filebuf Class

In questo articolo viene descritto un buffer di flusso che controlla la trasmissione di elementi di tipo Elem, con caratteristiche di carattere sono determinate dalla classe Tr, a e da una sequenza di elementi archiviati in un file esterno.

template <class Elem, class Tr = char_traits<Elem> >
    class basic_filebuf : public basic_streambuf<Elem, Tr>

Parametri

  • Elem
    L'elemento di base del buffer del file.

  • Tr
    Le caratteristiche dell'elemento di base del buffer del file (in genere char_traits<Elem>).

Note

La classe template viene descritto un buffer di flusso che controlla la trasmissione di elementi di tipo Elem, con caratteristiche di carattere sono determinate dalla classe Tr, a e da una sequenza di elementi archiviati in un file esterno.

[!NOTA]

Gli oggetti di tipo basic_filebuf vengono creati con un buffer interno del tipo char * indipendentemente il char_type specificato dal parametro di tipo Elem.Ciò significa che una stringa Unicode (contenente wchar_t caratteri) verrà convertito in una stringa ANSI (contenente char caratteri) prima che venga scritto nel buffer interno.Per memorizzare le stringhe Unicode nel buffer, creare un nuovo buffer di tipo wchar_t e impostarla utilizzando il basic_streambuf::pubsetbuf() metodo.Per visualizzare un esempio che illustri questo comportamento, vedere di seguito.

An object of class basic_filebuf<Elem, Tr> memorizza un puntatore a file, che designa la FILE oggetto che controlla il flusso associato a un file aperto.Memorizza anche i puntatori a due aspetti della conversione di file da utilizzare dalle funzioni membro protetto overflow e underflow.Per ulteriori informazioni, vedere basic_filebuf::open.

Esempio

Nell'esempio riportato di seguito viene illustrato come forzare un oggetto di tipo basic_filebuf<wchar_t> per memorizzare i caratteri Unicode nel buffer interno mediante la chiamata di pubsetbuf() metodo.

// 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(it-it,VS.110).gifCostruttori

basic_filebuf

Costruisce un oggetto di tipo basic_filebuf.

tzf8k3z8.collapse_all(it-it,VS.110).gifDefinizioni typedef

char_type

Associa un nome di tipo con il Elem parametro di template.

int_type

Rende questo tipo all'interno di basic_filebufdell'ambito equivalente al tipo lo stesso nome nella Tr ambito.

off_type

Rende questo tipo all'interno di basic_filebufdell'ambito equivalente al tipo lo stesso nome nella Tr ambito.

pos_type

Rende questo tipo all'interno di basic_filebufdell'ambito equivalente al tipo lo stesso nome nella Tr ambito.

traits_type

Associa un nome di tipo con il Tr parametro di template.

tzf8k3z8.collapse_all(it-it,VS.110).gifFunzioni membro

Chiudere

Chiude un file.

is_open

Indica se un file è aperto.

Aprire

Apre un file.

overflow

Una funzione virtuale protetta che può essere chiamata quando un nuovo carattere viene inserito in un buffer pieno.

pbackfail

La funzione membro virtuale protetto tenta di ripristinare un elemento nel flusso di input, quindi rendere l'elemento corrente (a cui fa riferimento il puntatore del mouse).

seekoff

La funzione membro virtuale protetto tenta di modificare le posizioni correnti per i flussi controllati.

seekpos

La funzione membro virtuale protetto tenta di modificare le posizioni correnti per i flussi controllati.

setbuf

La funzione membro virtuale protetto esegue una particolare operazione per ogni buffer del flusso derivata.

Scambio

Scambia il contenuto di questo basic_filebuf per il contenuto di fornito basic_filebuf parametro.

sincronizzazione

Funzione protetto, virtuale tenta di sincronizzare i flussi controllati con i flussi esterni associati.

uflow

Protetto, virtuale funzione per estrarre l'elemento corrente dal flusso di input.

underflow

Protetto, virtuale funzione per estrarre l'elemento corrente dal flusso di input.

Requisiti

Intestazione: <fstream>

Spazio dei nomi: std

Vedere anche

Riferimenti

Thread safety della libreria C++ standard

programmazione di iostream

convenzioni di iostream

Altre risorse

<fstream> membri

membri di basic_filebuf