Freigeben über


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

basic_filebuf

Konstruiert ein Objekt vom Typ basic_filebuf.

Typedefs

char_type

Ordnet einen Typnamen mit dem Vorlagenparameter Elem zu.

int_type

Ermöglicht diesen Typ in der basic_filebuf Bereichsentsprechung dem Typ des gleichen Namens in Tr ausführen.

off_type

Ermöglicht diesen Typ in der basic_filebuf Bereichsentsprechung dem Typ des gleichen Namens in Tr ausführen.

pos_type

Ermöglicht diesen Typ in der basic_filebuf Bereichsentsprechung dem Typ des gleichen Namens in Tr ausführen.

traits_type

Ordnet einen Typnamen mit dem Vorlagenparameter Tr zu.

Memberfunktionen

schließen

Schließt eine Datei.

is_open

Gibt an, ob eine Datei geöffnet ist.

open

Öffnet eine Datei.

Überlauf

Eine geschützte virtuelle Funktion, die aufgerufen, wenn ein neues Zeichen in einem vollständigen Puffer eingefügt wird.

pbackfail

Die geschützte virtuelle Memberfunktion versucht, die ein Element in dem Eingabestream ablegen, wird das aktuelle Element (dargestellt für vom folgenden Zeiger).

seekoff

Die Versuche der geschützten virtuellen Memberfunktion, um die aktuelle Position für die kontrollierten Streams zu ändern.

seekpos

Die Versuche der geschützten virtuellen Memberfunktion, um die aktuelle Position für die kontrollierten Streams zu ändern.

setbuf

Die geschützte virtuelle Memberfunktion wird eine Vorgangseinzelheit auf jedes abgeleiteten Streampuffer aus.

Austauschen

Vertauscht den Inhalt dieses basic_filebuf für den Inhalt des bereitgestellten basic_filebuf-Parameters aus.

Synchronisierung

Geschützte, virtuelle Funktionsversuche, die Streams kontrollierten mit allen zugeordneten externen Streams zu synchronisieren.

uflow

Geschützte, virtuelle Funktion, um das aktuelle Element des Eingabestreams zu extrahieren.

Unterlauf

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

iostream-Programmierung

iostreams-Konventionen

Weitere Ressourcen

<fstream> Member

basic_filebuf Member