basic_filebuf Class
Beschreibt einen Streampuffer, der die Übertragung von Elementen des Typs steuert Elem, deren Eigenschaften hängen von der Klasse Tr, nach und aus einer Sequenz von Elementen in einer externen Datei gespeichert.
template <class Elem, class Tr = char_traits<Elem> >
class basic_filebuf : public basic_streambuf<Elem, Tr>
Parameter
Elem
Das Grundelement des Dateipuffers.Tr
Die Merkmale der das Grundelement des Dateipuffers (in der Regel char_traits<Elem>).
Hinweise
Die Vorlage-Klasse beschreibt einen Streampuffer, der die Übertragung von Elementen des Typs steuert Elem, deren Eigenschaften hängen von der Klasse Tr, nach und aus einer Sequenz von Elementen in einer externen Datei gespeichert.
Hinweis |
---|
Objekte vom Typ basic_filebuf mit einem internen Puffer des Typs erstellt werden char * unabhängig von der char_type von der Type-Parameter angegebenen Elem.Dies bedeutet, dass eine Unicode-Zeichenfolge (mit wchar_t Zeichen) wird in eine ANSI-Zeichenfolge konvertiert werden (mit char Zeichen) bevor sie auf den internen Puffer geschrieben werden.Um Unicode-Zeichenfolgen in den Puffer zu speichern, erstellen einen neuen Puffer vom Typ wchar_t , und legen Sie es mit der basic_streambuf::pubsetbuf() Methode.Ein Beispiel, das dieses Verhalten veranschaulicht, finden Sie unter unten. |
An object of class basic_filebuf<Elem, Tr> Speichert einen File-Zeiger, bestimmt die FILE -Objekt, das die Streams mit einer geöffneten Datei steuert.Es speichert auch Verweise auf zwei Facetten der Datei-Konvertierung für die Verwendung von geschützten Member-Funktionen Überlauf und Unterlauf.Weitere Informationen finden Sie unter basic_filebuf::open.
Beispiel
Im folgende Beispiel wird veranschaulicht, wie ein Objekt vom Typ erzwingen basic_filebuf<wchar_t> zum Speichern von Unicode-Zeichen in ihren internen Puffer durch Aufruf der pubsetbuf() Methode.
// 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
Erstellt ein Objekt vom Typ basic_filebuf. |
Typedefs
Ordnet einen Typnamen mit dem Elem Vorlagenparameter. |
|
Macht diesen Typ in basic_filebuf's äquivalent zum Typ mit demselben Namen im Bereich der Tr Bereich. |
|
Macht diesen Typ in basic_filebuf's äquivalent zum Typ mit demselben Namen im Bereich der Tr Bereich. |
|
Macht diesen Typ in basic_filebuf's äquivalent zum Typ mit demselben Namen im Bereich der Tr Bereich. |
|
Ordnet einen Typnamen mit dem Tr Vorlagenparameter. |
Member-Funktionen
Schließt eine Datei. |
|
Gibt an, ob eine Datei geöffnet ist. |
|
Öffnet eine Datei. |
|
Eine geschützte virtuelle Funktion, die aufgerufen werden kann, wenn ein neues Zeichen in einem vollständigen Puffer eingefügt wird. |
|
Die geschützten virtuellen Member-Funktion versucht, setzen Sie wieder ein Element in dem Eingabestream, dann machen es das aktuelle Element (mit der nächsten Zeiger verwiesen). |
|
Die geschützten virtuellen Member-Funktion versucht, die aktuellen Positionen für die kontrollierte Datenströme zu ändern. |
|
Die geschützten virtuellen Member-Funktion versucht, die aktuellen Positionen für die kontrollierte Datenströme zu ändern. |
|
Die geschützten virtuellen Member-Funktion führt eine Operation bestimmten zu jeder abgeleiteten Streampuffer. |
|
Tauscht den Inhalt dieses basic_filebuf für den Inhalt der bereitgestellten basic_filebuf Parameter. |
|
Geschützte, virtuelle Funktion versucht, die kontrollierte Datenströme mit allen zugeordneten externe Streams zu synchronisieren. |
|
Geschützt, virtuelle Funktion zum Extrahieren des aktuellen Elements aus dem Eingabestream. |
|
Geschützt, virtuelle Funktion zum Extrahieren des aktuellen Elements aus dem Eingabestream. |
Anforderungen
Header: <fstream>
Namespace: std
Siehe auch
Referenz
Threadsicherheit in der C++-Standardbibliothek
Programmierung der iostream-Headerdatei