basic_filebuf-Klasse
Beschreibt einen Streampuffer, der die Übertragung von Elementen des Typs Elem steuert, dessen Zeichenmerkmale über die Klasse Tr bestimmt werden, und von einer Sequenz von Elementen, die in einer externen Datei gespeichert wird.
template <class Elem, class Tr = char_traits<Elem> >
class basic_filebuf : public basic_streambuf<Elem, Tr>
Parameter
Elem
Das grundlegende Element des Dateipuffers.Tr
Die Features des grundlegenden Elements des Dateipuffers (normalerweise char_traits<Elem>).
Hinweise
Die Vorlagenklasse beschreibt einen Streampuffer, der die Übertragung von Elementen des Typs Elem steuert, dessen Zeichenmerkmale über die Klasse Tr bestimmt werden, und von einer Sequenz von Elementen, die in einer externen Datei gespeichert wird.
Hinweis
Objekte des Typs basic_filebuf werden mit einem internen Puffer des Typs char * unabhängig von char_type erstellt, das durch den Typparameter Elem angegeben wird.Dies bedeutet, dass einer Unicode-Zeichenfolge ( wchar_t Zeichen enthalten) in eine ANSI-Zeichenfolge konvertiert wird ( char Zeichen enthalten) bevor sie den internen Puffer eingegeben wird.Um Unicode-Zeichenfolgen im Puffer zu speichern, erstellen Sie einen neuen Puffer des Typs wchar_t und legen Sie ihn mit der basic_streambuf::pubsetbuf() fest.Um ein Beispiel zu finden das dieses Verhalten veranschaulicht, finden Sie unten.
Ein Objekt der Klasse basic_filebuf<Elem, Tr> speichert einen Dateizeiger, der das FILE-Objekt festlegen, das den Stream steuert, der mit einer geöffneten Datei zugeordnet ist. Er speichert auch Zeiger auf zwei Dateikonvertierungsfacets für die geschützte Memberfunktionen Überlauf und Unterlauf. Weitere Informationen finden Sie unter basic_filebuf::open.
Beispiel
Das folgende Beispiel zeigt, wie ein Objekt vom Typ basic_filebuf<wchar_t> in den Speicher Unicode-Zeichen in seinem internen Puffer erzwingt, indem die pubsetbuf()-Methode aufruft.
// 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();
}
Konstruktoren
Konstruiert ein Objekt vom Typ basic_filebuf. |
Typedefs
Ordnet einen Typnamen mit dem Vorlagenparameter Elem zu. |
|
Ermöglicht diesen Typ in der basic_filebuf Bereichsentsprechung dem Typ des gleichen Namens in Tr ausführen. |
|
Ermöglicht diesen Typ in der basic_filebuf Bereichsentsprechung dem Typ des gleichen Namens in Tr ausführen. |
|
Ermöglicht diesen Typ in der basic_filebuf Bereichsentsprechung dem Typ des gleichen Namens in Tr ausführen. |
|
Ordnet einen Typnamen mit dem Vorlagenparameter Tr zu. |
Memberfunktionen
Schließt eine Datei. |
|
Gibt an, ob eine Datei geöffnet ist. |
|
Öffnet eine Datei. |
|
Eine geschützte virtuelle Funktion, die aufgerufen, wenn ein neues Zeichen in einem vollständigen Puffer eingefügt wird. |
|
Die geschützte virtuelle Memberfunktion versucht, die ein Element in dem Eingabestream ablegen, wird das aktuelle Element (dargestellt für vom folgenden Zeiger). |
|
Die Versuche der geschützten virtuellen Memberfunktion, um die aktuelle Position für die kontrollierten Streams zu ändern. |
|
Die Versuche der geschützten virtuellen Memberfunktion, um die aktuelle Position für die kontrollierten Streams zu ändern. |
|
Die geschützte virtuelle Memberfunktion wird eine Vorgangseinzelheit auf jedes abgeleiteten Streampuffer aus. |
|
Vertauscht den Inhalt dieses basic_filebuf für den Inhalt des bereitgestellten basic_filebuf-Parameters aus. |
|
Geschützte, virtuelle Funktionsversuche, die Streams kontrollierten mit allen zugeordneten externen Streams zu synchronisieren. |
|
Geschützte, virtuelle Funktion, um das aktuelle Element des Eingabestreams zu extrahieren. |
|
Geschützte, virtuelle Funktion, um das aktuelle Element des Eingabestreams zu extrahieren. |
Anforderungen
Header: <fstream>
Namespace: std
Siehe auch
Referenz
Threadsicherheit in der C++-Standardbibliothek