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();
}
Costruttori
Costruisce un oggetto di tipo basic_filebuf. |
Definizioni typedef
Associa un nome di tipo con il Elem parametro di template. |
|
Rende questo tipo all'interno di basic_filebufdell'ambito equivalente al tipo lo stesso nome nella Tr ambito. |
|
Rende questo tipo all'interno di basic_filebufdell'ambito equivalente al tipo lo stesso nome nella Tr ambito. |
|
Rende questo tipo all'interno di basic_filebufdell'ambito equivalente al tipo lo stesso nome nella Tr ambito. |
|
Associa un nome di tipo con il Tr parametro di template. |
Funzioni membro
Chiude un file. |
|
Indica se un file è aperto. |
|
Apre un file. |
|
Una funzione virtuale protetta che può essere chiamata quando un nuovo carattere viene inserito in un buffer pieno. |
|
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). |
|
La funzione membro virtuale protetto tenta di modificare le posizioni correnti per i flussi controllati. |
|
La funzione membro virtuale protetto tenta di modificare le posizioni correnti per i flussi controllati. |
|
La funzione membro virtuale protetto esegue una particolare operazione per ogni buffer del flusso derivata. |
|
Scambia il contenuto di questo basic_filebuf per il contenuto di fornito basic_filebuf parametro. |
|
Funzione protetto, virtuale tenta di sincronizzare i flussi controllati con i flussi esterni associati. |
|
Protetto, virtuale funzione per estrarre l'elemento corrente dal flusso di input. |
|
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