basic_filebuf-Klasse
Beschreibt einen Datenstrompuffer, der die Übertragung von Elementen vom Typ Char_T steuert, deren Zeicheneigenschaften durch die Klasse Tr und von einer Abfolge von Elementen bestimmt werden, die in einer externen Datei gespeichert sind.
Syntax
template <class Char_T, class Tr = char_traits<Char_T>>
class basic_filebuf : public basic_streambuf<Char_T, Tr>
Parameter
Char_T
Das grundlegende Element des Dateipuffers.
Tr
Die Eigenschaften des grundlegenden Elements des Dateipuffers (in der Regel char_traits<Char_T>
).
Hinweise
Die Klassenvorlage beschreibt einen Datenstrompuffer, der die Übertragung von Elementen vom Typ Char_T steuert, deren Zeicheneigenschaften durch die Klasse Tr und von einer Abfolge von Elementen bestimmt werden, die in einer externen Datei gespeichert sind.
Hinweis
Objekte vom Typ basic_filebuf
werden unabhängig vom char_type
angegebenen Typparameter Char_T mit einem internen Puffer vom Typ char* erstellt. Eine Unicode-Zeichenfolge (die wchar_t
-Zeichen enthält) wird demnach in eine ANSI-Zeichenfolge (die char
-Zeichen enthält) umgewandelt, bevor sie in den internen Puffer geschrieben wird. Um Unicode-Zeichenfolgen im Puffer zu speichern, erstellen Sie einen neuen Typpuffer wchar_t
, und legen Sie ihn mithilfe der basic_streambuf::pubsetbuf
()
Methode fest. Ein Beispiel, in dem dieses Verhalten veranschaulicht wird, finden Sie im Folgenden.
Ein Objekt der Klasse basic_filebuf<Char_T, Tr>
speichert einen Dateizeiger, der das FILE
Objekt angibt, das den datenstrom steuert, der einer geöffneten Datei zugeordnet ist. Es speichert zudem Zeiger zu zwei Dateikonvertierungs-Facets für die Verwendung durch die geschützten Memberfunktionen overflow und underflow. Weitere Informationen finden Sie unter basic_filebuf::open
.
Beispiel
Im folgenden Beispiel wird gezeigt, wie ein Objekt des Typs basic_filebuf<wchar_t>
gezwungen wird, Unicode-Zeichen in seinem internen Puffer durch den Aufruf der pubsetbuf()
-Methode zu speichern.
// 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();
}
Hex Dump of wcHello.txt - note that output is ANSI chars:
48 65 6c 6c 6f 20 57 6f 72 6c 64 00 00 00 00 00 Hello World.....
Hex Dump of wwHello.txt - note that output is wchar_t chars:
48 00 65 00 6c 00 6c 00 6f 00 20 00 57 00 6f 00 H.e.l.l.o. .W.o.
72 00 6c 00 64 00 00 00 00 00 00 00 00 00 00 00 r.l.d...........
Konstruktoren
Konstruktor | Beschreibung |
---|---|
basic_filebuf | Konstruiert ein Objekt vom Typ basic_filebuf . |
TypeDefs
Typname | Beschreibung |
---|---|
char_type | Verknüpft einen Typnamen mit dem Char_T -Vorlagenparameter. |
int_type | Stellt den Typ im Bereich von basic_filebuf dem Typ desselben Namens im Bereich Tr gleich. |
off_type | Stellt den Typ im Bereich von basic_filebuf dem Typ desselben Namens im Bereich Tr gleich. |
pos_type | Stellt den Typ im Bereich von basic_filebuf dem Typ desselben Namens im Bereich Tr gleich. |
traits_type | Verknüpft einen Typnamen mit dem Tr -Vorlagenparameter. |
Memberfunktionen
Memberfunktion | Beschreibung |
---|---|
close | Schließt eine Datei. |
is_open | Gibt an, ob eine Datei geöffnet ist. |
open | Öffnet eine Datei. |
overflow | Eine geschützte virtuelle Funktion, die aufgerufen werden kann, wenn ein neues Zeichen in einen vollen Puffer eingefügt wird. |
pbackfail | Die geschützte virtuelle Memberfunktion versucht, ein Element zurück in den Eingabestream zu versetzen und es dann zum aktuellen Element zu ernennen (wird mit dem nächsten Zeiger darauf gezeigt). |
seekoff | Die geschützte virtuelle Memberfunktion versucht, die aktuellen Positionen für die gesteuerten Streams zu ändern. |
seekpos | Die geschützte virtuelle Memberfunktion versucht, die aktuellen Positionen für die gesteuerten Streams zu ändern. |
setbuf | Die geschützte virtuelle Memberfunktion führt einen für jeden abgeleiteten Streampuffer bestimmten Vorgang aus. |
Swap | Tauscht den basic_filebuf -Inhalt mit dem Inhalt des angegebenen basic_filebuf -Parameters. |
sync | Die geschützte virtuelle Funktion versucht, die gesteuerten Streams mit zugehörigen externen Streams zu synchronisieren. |
uflow | Die geschützte virtuelle Funktion versucht, das aktuelle Element aus dem Eingabestream zu extrahieren. |
underflow | Die geschützte virtuelle Funktion versucht, das aktuelle Element aus dem Eingabestream zu extrahieren. |
Anforderungen
Header:<fstream>
Namespace: std
basic_filebuf::basic_filebuf
Konstruiert ein Objekt vom Typ basic_filebuf
.
basic_filebuf();
basic_filebuf(basic_filebuf&& right);
Hinweise
Der erste Konstruktor speichert einen NULL-Zeiger in allen Zeigern, die den Eingabe- und Ausgabepuffer steuern. Außerdem wird ein NULL-Zeiger im Dateizeiger gespeichert.
Der zweite Konstruktor initialisiert das Objekt mit dem Inhalt von right
, das als rvalue-Verweis behandelt wird.
basic_filebuf::char_type
Verknüpft einen Typnamen mit dem Char_T
-Vorlagenparameter.
typedef Char_T char_type;
basic_filebuf::close
Schließt eine Datei.
basic_filebuf<Char_T, Tr> *close();
Rückgabewert
Die Memberfunktion gibt einen NULL-Zeiger zurück, wenn der Dateizeiger ein NULL-Zeiger ist.
Hinweise
close
ruft fclose(fp)
auf. Wenn diese Funktion einen Wert zurückgibt, der ungleich Null ist, gibt die Funktion einen NULL-Zeiger zurück. Andernfalls wird zurückgegeben this
, dass die Datei erfolgreich geschlossen wurde.
Bei einem breiten Datenstrom, wenn seit dem Öffnen des Datenstroms oder seit dem letzten Aufruf streampos
der Funktion overflow
Einfügungen aufgetreten sind. Außerdem wird jede Sequenz eingefügt, die zum Wiederherstellen des anfänglichen Konvertierungszustands erforderlich ist, indem das Facet fac
für die Dateikonvertierung verwendet wird, um nach Bedarf aufzurufen fac.unshift
. Jedes erzeugte Element byte
des Typs char
wird in den zugeordneten Datenstrom geschrieben, der vom Dateizeiger fp
als durch aufeinander folgende Aufrufe des Formulars fputc(byte, fp)
festgelegt wird. Wenn der Aufruf oder fac.unshift
ein Schreibvorgang fehlschlägt, ist die Funktion nicht erfolgreich.
Beispiel
Im folgenden Beispiel wird davon ausgegangen, dass zwei Dateien im aktuellen Verzeichnis vorhanden sind: basic_filebuf_close.txt (Inhalt ist "Testen") und iotest.txt (Inhalt ist "ssss").
// basic_filebuf_close.cpp
// compile with: /EHsc
#include <fstream>
#include <iostream>
int main() {
using namespace std;
ifstream file;
basic_ifstream <wchar_t> wfile;
char c;
// Open and close with a basic_filebuf
file.rdbuf()->open( "basic_filebuf_close.txt", ios::in );
file >> c;
cout << c << endl;
file.rdbuf( )->close( );
// Open/close directly
file.open( "iotest.txt" );
file >> c;
cout << c << endl;
file.close( );
// open a file with a wide character name
wfile.open( L"iotest.txt" );
// Open and close a nonexistent with a basic_filebuf
file.rdbuf()->open( "ziotest.txt", ios::in );
cout << file.fail() << endl;
file.rdbuf( )->close( );
// Open/close directly
file.open( "ziotest.txt" );
cout << file.fail() << endl;
file.close( );
}
t
s
0
1
basic_filebuf::int_type
Macht diesen Typ innerhalb basic_filebuf
des Bereichs gleichbedeutend mit dem Typ desselben Namens im Tr
Bereich.
typedef typename traits_type::int_type int_type;
basic_filebuf::is_open
Gibt an, ob eine Datei geöffnet ist.
bool is_open() const;
Rückgabewert
true
wenn der Dateizeiger nicht NULL ist.
Beispiel
// basic_filebuf_is_open.cpp
// compile with: /EHsc
#include <fstream>
#include <iostream>
int main( )
{
using namespace std;
ifstream file;
cout << boolalpha << file.rdbuf( )->is_open( ) << endl;
file.open( "basic_filebuf_is_open.cpp" );
cout << file.rdbuf( )->is_open( ) << endl;
}
false
true
basic_filebuf::off_type
Macht diesen Typ innerhalb basic_filebuf
des Bereichs gleichbedeutend mit dem Typ desselben Namens im Tr
Bereich.
typedef typename traits_type::off_type off_type;
basic_filebuf::open
Öffnet eine Datei.
basic_filebuf<Char_T, Tr> *open(
const char* filename,
ios_base::openmode mode,
int protection = (int)ios_base::_Openprot);
basic_filebuf<Char_T, Tr> *open(
const char* filename,
ios_base::openmode mode);
basic_filebuf<Char_T, Tr> *open(
const wchar_t* filename,
ios_base::openmode mode,
int protection = (int)ios_base::_Openprot);
basic_filebuf<Char_T, Tr> *open(
const wchar_t* filename,
ios_base::openmode mode);
Parameter
filename
Der Name der zu öffnenden Datei.
mode
Eine der Enumerationen in ios_base::openmode
.
Schutz
Der Standardmäßige Dateiöffnungsschutz, der dem Shflag-Parameter in _fsopen entspricht, _wfsopen.
Rückgabewert
Wenn der Puffer bereits geöffnet ist oder der Dateizeiger ein Nullzeiger ist, gibt die Funktion einen Nullzeiger zurück. Andernfalls wird this
zurückgegeben.
Hinweise
Diese Funktion verwendet eine FILE *
zurück, basic_filebuf
als hätten Sie aufgerufen fopen/wfopen
(filename, strmode)
. strmode
wird bestimmt von mode & ~(
ate
binary
|
)
:
ios_base::in
wird"r"
(vorhandene Datei zum Lesen öffnen).- ios_base::out oder
ios_base::out | ios_base::trunc
wird"w"
(vorhandene Datei abschneiden oder zum Schreiben erstellen). ios_base::out | app
wird"a"
(vorhandene Datei zum Anfügen aller Schreibvorgänge öffnen).ios_base::in | ios_base::out
wird"r+"
(vorhandene Datei zum Lesen und Schreiben öffnen).ios_base::in | ios_base::out | ios_base::trunc
wird"w+"
(vorhandene Datei abschneiden oder zum Lesen und Schreiben erstellen).ios_base::in | ios_base::out | ios_base::app
wird"a+"
(öffnen Sie vorhandene Datei zum Lesen und zum Anfügen aller Schreibvorgänge).
Ist mode & ios_base::binary
"nonzero" angegeben, wird die Funktion angefügt, um einen binären Datenstrom anstelle eines Textstreams b
strmode
zu öffnen.
Wenn mode & ios_base::ate
die Datei nicht null ist und die Datei erfolgreich geöffnet wurde, wird der aktuelle Speicherort im Datenstrom am Ende der Datei positioniert. Wenn dies fehlschlägt, wird die Datei geschlossen.
Wenn die oben genannten Vorgänge erfolgreich abgeschlossen wurden, wird das Facet für die Dateikonvertierung bestimmt: use_facet<codecvt<Char_T, char, traits_type::
state_type
)
> >(
getloc
für die Verwendung durch Unterlauf und Überlauf.
Wenn die Datei nicht erfolgreich geöffnet werden konnte, nullptr
wird sie zurückgegeben.
Beispiel
Ein Beispiel, das verwendet wird, open
finden Sie unter basic_filebuf::close
.
basic_filebuf::operator=
Weist den Inhalt dieses Streampufferobjekts zu. Dies ist eine Verschiebungszuweisung mit einem Wert, der keine Kopie hinterlässt.
basic_filebuf& operator=(basic_filebuf&& right);
Parameter
right
Ein rvalue-Verweis auf ein basic_filebuf-Objekt.
Rückgabewert
Gibt *this
zurück.
Hinweise
Der Member-Operator ersetzt den Inhalt des Objekts mithilfe des Inhalts von right
, als Rvalue-Verweis behandelt. Weitere Informationen finden Sie unter RValue-Verweisdeklarator: &&.
basic_filebuf::overflow
Wird aufgerufen, wenn ein neues Zeichen in einen vollen Puffer eingefügt wird.
virtual int_type overflow(int_type _Meta = traits_type::eof);
Parameter
_Meta
Das Zeichen, das in den Puffer eingefügt werden soll.traits_type::eof
Rückgabewert
Wenn die Funktion nicht erfolgreich sein kann, wird sie zurückgegeben traits_type::eof
. Andernfalls wird traits_type::
not_eof
(_Meta)
zurückgegeben.
Hinweise
Wenn _Meta != traits_type::
eof
die geschützte virtuelle Memberfunktion versucht, das Element(_Meta)
ch = traits_type::
to_char_type
in den Ausgabepuffer einzufügen. Hierfür gibt es verschiedene Möglichkeiten:
Wenn eine Schreibposition verfügbar ist, kann das Element in der Schreibposition gespeichert werden, und der nächste Zeiger für den Ausgabepuffer kann inkrementiert werden.
Eine Schreibposition kann verfügbar gemacht werden, indem neuer oder zusätzlicher Speicher für den Ausgabepuffer zugewiesen wird.
Es kann jede ausstehende Ausgabe im Ausgabepuffer, gefolgt von
ch
, konvertieren, indem sie das Dateikonvertierungs-Facetfac
verwenden, um nach Bedarf aufzurufenfac.out
. Jedes erzeugte Elementch
vom Typ char wird in den zugeordneten Datenstrom geschrieben, der vom Dateizeigerfp
festgelegt wird, als ob durch aufeinander folgende Aufrufe des Formularsfputc(ch, fp)
. Wenn konvertierungs- oder schreibvorgänge fehlschlagen, ist die Funktion nicht erfolgreich.
basic_filebuf::p backfail
Versucht, ein Element zurück in den Eingabestream zu versetzen und es dann zum aktuellen Element zu ernennen (wird mit dem nächsten Zeiger darauf gezeigt).
virtual int_type pbackfail(int_type _Meta = traits_type::eof);
Parameter
_Meta
Das Zeichen, das in den Puffer eingefügt werden soll, oder traits_type::eof
.
Rückgabewert
Wenn die Funktion nicht erfolgreich sein kann, wird sie zurückgegeben traits_type::eof
. Andernfalls wird traits_type::
not_eof
(_Meta)
zurückgegeben.
Hinweise
Die geschützte virtuelle Memberfunktion versetzt ein Element zurück in den Eingabepuffer und ernennt es dann zum aktuellen Element (wird mit dem nächsten Zeiger darauf gezeigt). Wenn _Meta == traits_type::
eof
das element, das zurückgeschoben werden soll, effektiv das Element, das sich bereits im Datenstrom befindet, vor dem aktuellen Element ist. Andernfalls wird dieses Element durch ch = traits_type::
to_char_type
(_Meta)
. Ein Element kann auf verschiedene Arten durch die Funktion wiederhergestellt werden:
Wenn eine
putback
Position verfügbar ist und das dort gespeicherte Element gleichch
gleich ist, kann er den nächsten Zeiger für den Eingabepuffer erhöhen.Wenn die Funktion eine
putback
Position verfügbar machen kann, können Sie dies tun, legen Sie den nächsten Zeiger auf diese Position fest, und speichern Siech
ihn an dieser Position.Wenn die Funktion ein Element auf den Eingabedatenstrom zurückdrücken kann, kann dies möglich sein, z. B. durch Aufrufen
ungetc
eines Elements vom Typchar
.
basic_filebuf::p os_type
Macht diesen Typ innerhalb basic_filebuf
des Bereichs gleichbedeutend mit dem Typ desselben Namens im Tr
Bereich.
typedef typename traits_type::pos_type pos_type;
basic_filebuf::seekoff
Versucht, die aktuellen Positionen für die gesteuerten Streams zu ändern.
virtual pos_type seekoff(
off_type _Off,
ios_base::seekdir _Way,
ios_base::openmode _Which = ios_base::in | ios_base::out);
Parameter
_Aus
Die Position, die relativ zu _Way gesucht werden soll.
_Weg
Der Startpunkt für Offsetvorgänge. Mögliche Werte sind unter seekdir aufgeführt.
_Welche
Gibt den Modus für die Zeigerposition an. Standardmäßig können Lese- und Schreibpositionen geändert werden.
Rückgabewert
Gibt die neue Position oder eine ungültige Streamposition zurück.
Hinweise
Die geschützte virtuelle Memberfunktion versucht, die aktuellen Positionen für die kontrollierten Datenströme zu ändern. Bei einem Objekt der Klasse basic_filebuf
<Char_T, Tr>
kann eine Datenstromposition durch ein Objekt vom Typ fpos_t
dargestellt werden, das einen Offset und alle Zustandsinformationen speichert, die zum Analysieren eines breiten Datenstroms erforderlich sind. Offset 0 bezieht sich auf das erste Element des Datenstroms. (Ein Objekt vom Typ pos_type
speichert mindestens ein fpos_t
-Objekt.)
Bei einer Datei, die sowohl zum Lesen als auch zum Schreiben geöffnet wird, werden sowohl die Eingabe- als auch Ausgabestreams zusammen positioniert. Um zwischen Einfügen und Extrahieren zu wechseln, müssen Sie entweder pubseekoff
oder pubseekpos
. Aufrufe von pubseekoff
(und somit von seekoff
) haben verschiedene Einschränkungen für Textstreams, binäre Streams und breite Streams.
Wenn der Dateizeiger fp
ein NULL-Zeiger ist, schlägt die Funktion fehl. Andernfalls wird versucht, die Datenstromposition durch Aufrufen fseek(fp, _Off, _Way)
zu ändern. Wenn diese Funktion erfolgreich ist und die resultierende Position fposn
durch Aufrufen fgetpos(fp, &fposn)
bestimmt werden kann, ist die Funktion erfolgreich. Wenn die Funktion erfolgreich ist, wird ein Wert vom Typ pos_type
zurückgegeben, der enthält fposn
. Andernfalls gibt sie eine ungültige Streamposition zurück.
basic_filebuf::seekpos
Versucht, die aktuellen Positionen für die gesteuerten Streams zu ändern.
virtual pos_type seekpos(
pos_type _Sp,
ios_base::openmode _Which = ios_base::in | ios_base::out);
Parameter
_Sp
Die Position, nach der gesucht werden soll.
_Welche
Gibt den Modus für die Zeigerposition an. Standardmäßig können Lese- und Schreibpositionen geändert werden.
Rückgabewert
Wenn der Dateizeiger fp
ein NULL-Zeiger ist, schlägt die Funktion fehl. Andernfalls wird versucht, die Datenstromposition durch Aufrufen fsetpos(fp, &fposn)
des Objekts zu ändern, in dem fposn
das fpos_t
Objekt gespeichert pos
ist. Wenn diese Funktion erfolgreich ausgeführt wurde, gibt die Funktion pos
zurück. Andernfalls gibt sie eine ungültige Streamposition zurück. Vergleichen Sie den Rückgabewert mit pos_type(off_type(-1))
, um festzustellen, ob die Streamposition ungültig ist.
Hinweise
Die geschützte virtuelle Memberfunktion versucht, die aktuellen Positionen für die kontrollierten Datenströme zu ändern. Bei einem Objekt der Klasse basic_filebuf
<Char_T, Tr>
kann eine Datenstromposition durch ein Objekt vom Typ fpos_t
dargestellt werden, das einen Offset und alle Zustandsinformationen speichert, die zum Analysieren eines breiten Datenstroms erforderlich sind. Offset 0 bezieht sich auf das erste Element des Datenstroms. (Ein Objekt vom Typ pos_type
speichert mindestens ein fpos_t
-Objekt.)
Bei einer Datei, die sowohl zum Lesen als auch zum Schreiben geöffnet wird, werden sowohl die Eingabe- als auch Ausgabestreams zusammen positioniert. Um zwischen Einfügen und Extrahieren zu wechseln, müssen Sie entweder pubseekoff
oder pubseekpos
. Aufrufe an pubseekoff
(und an seekoff
) weisen verschiedene Einschränkungen für Textdatenströme, binäre Datenströme und breite Datenströme auf.
Bei einem breiten Datenstrom, wenn seit dem Öffnen des Datenstroms oder seit dem letzten Aufruf streampos
der Funktion overflow
Einfügungen aufgetreten sind. Außerdem wird jede Sequenz eingefügt, die zum Wiederherstellen des anfänglichen Konvertierungszustands erforderlich ist, indem das Facet fac
für die Dateikonvertierung verwendet wird, um nach Bedarf aufzurufen fac.unshift
. Jedes erzeugte Element byte
des Typs char
wird in den zugeordneten Datenstrom geschrieben, der vom Dateizeiger fp
als durch aufeinander folgende Aufrufe des Formulars fputc(byte, fp)
festgelegt wird. Wenn der Aufruf oder fac.unshift
ein Schreibvorgang fehlschlägt, ist die Funktion nicht erfolgreich.
basic_filebuf::setbuf
Führt einen für jeden abgeleiteten Streampuffer bestimmten Vorgang aus.
virtual basic_streambuf<Char_T, Tr> *setbuf(
char_type* _Buffer,
streamsize count);
Parameter
_Puffer
Ein Zeiger auf einen Puffer.
count
Größe des Puffers.
Rückgabewert
Die geschützte Memberfunktion gibt Null zurück, wenn der Dateizeiger fp
ein NULL-Zeiger ist.
Hinweise
setbuf
Aufrufe setvbuf( fp, (char*) _Buffer, _IOFBF, count * sizeof( Char_T))
, um das Array von count
Elementen anzubieten, die bei _Buffer als Puffer für den Datenstrom beginnen. Wenn diese Funktion einen Wert zurückgibt, der ungleich Null ist, gibt die Funktion einen NULL-Zeiger zurück. Andernfalls wird der Signalerfolg zurückgegeben this
.
basic_filebuf::swap
Tauscht den Inhalt dieses basic_filebuf
-Objekts gegen den Inhalt des bereitgestellten basic_filebuf
-Objekts aus.
void swap(basic_filebuf& right);
Parameter
right
Ein lvalue-Verweis auf ein anderes basic_filebuf
.
basic_filebuf::sync
Versucht, die gesteuerten Streams mit zugehörigen externen Streams zu synchronisieren.
virtual int sync();
Rückgabewert
Gibt Null zurück, wenn der Dateizeiger fp
ein Nullzeiger ist. Andernfalls wird null nur zurückgegeben, wenn Aufrufe an überlauf und fflush(fp)
erfolgreich alle ausstehenden Ausgaben im Datenstrom geleert werden.
basic_filebuf::traits_type
Verknüpft einen Typnamen mit dem Tr
-Vorlagenparameter.
typedef Tr traits_type;
basic_filebuf::underflow
Extrahiert das aktuelle Element aus dem Eingabestream.
virtual int_type underflow();
Rückgabewert
Wenn die Funktion nicht erfolgreich sein kann, wird sie zurückgegeben traits_type::
eof
. Andernfalls wird ch
die Konvertierung wie im Abschnitt "Hinweise" beschrieben zurückgegeben.
Hinweise
Die geschützte virtuelle Memberfunktion versucht, das aktuelle Element ch
aus dem Eingabedatenstrom zu extrahieren und das Element als traits_type::
to_int_type
(ch)
. Hierfür gibt es verschiedene Möglichkeiten:
Wenn eine Leseposition verfügbar ist, wird es als in der Leseposition gespeichertes Element verwendet
ch
und der nächste Zeiger für den Eingabepuffer vorangestellt.Es kann ein oder mehrere Elemente des Typs
char
lesen, wie durch aufeinander folgende Aufrufe des Formularsfgetc(fp)
und konvertieren Sie sie in ein Elementch
vom TypChar_T
, indem sie das Dateikonvertierungsfacetfac
verwenden, um nach Bedarf aufzurufenfac.in
. Wenn ein Lese- oder Konvertierungsvorgang fehlschlägt, ist die Funktion nicht erfolgreich.
Siehe auch
<fstream>
Threadsicherheit in der C++-Standardbibliothek
iostream-Programmierung
iostreams-Konventionen