Udostępnij za pośrednictwem


basic_filebuf — Klasa

Opisuje buforu strumienia, która steruje transmisją elementy typu Elem, których cechy charakteru są określane przez klasę Tr, do i z sekwencji elementów zapisanych w pliku zewnętrznym.

template <class Elem, class Tr = char_traits<Elem> >
    class basic_filebuf : public basic_streambuf<Elem, Tr>

Parametry

  • Elem
    Elementem podstawowym buforu plików.

  • Tr
    Cechy podstawowy element buforu plików (zazwyczaj char_traits<Elem>).

Uwagi

Bufor strumienia, która steruje transmisją elementów tego typu zawiera opis szablonu klasy Elem, których cechy charakteru są określane przez klasę Tr, do i z sekwencji elementów zapisanych w pliku zewnętrznym.

[!UWAGA]

Obiekty typu basic_filebuf są tworzone z wewnętrznego buforu typu char * bez względu na char_type określonej przez parametr typu Elem.Oznacza to, że ciąg Unicode (zawierające wchar_t znaki) są konwertowane na ciąg ANSI (zawierające char znaków) przed zapisaniem do wewnętrznego buforu.Do przechowywania ciągów znaków Unicode w buforze, Utwórz nowy bufora o typie wchar_t i ustawić ją za pomocą basic_streambuf::pubsetbuf() metody.Aby zobaczyć przykład demonstrujący ten problem, zobacz poniżej.

Obiekt klasy basic_filebuf<Elem, Tr> przechowuje wskaźnika pliku, który wyznacza FILE obiekt, który kontroluje strumienia skojarzone z otwartego pliku.Również przechowywane są wskaźniki do dwóch aspektów konwersji pliku do użycia przez funkcje chroniony członek przepełnienie i niedomiar.Aby uzyskać dodatkowe informacje, zobacz basic_filebuf::open.

Przykład

Poniższy przykład ilustruje sposób wymusić obiektu typu basic_filebuf<wchar_t> do przechowywania znaków Unicode w jego wewnętrznego buforu poprzez wywołanie pubsetbuf() metody.

// 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();
}
  

Konstruktorów

basic_filebuf

Obiekt obiekt typu basic_filebuf.

Typedefs

char_type

Kojarzy nazwę typu z Elem parametr szablonu.

int_type

Sprawia, że tego typu w basic_filebufw zakres jest równoważny typowi o tej samej nazwie w Tr zakres.

off_type

Sprawia, że tego typu w basic_filebufw zakres jest równoważny typowi o tej samej nazwie w Tr zakres.

pos_type

Sprawia, że tego typu w basic_filebufw zakres jest równoważny typowi o tej samej nazwie w Tr zakres.

traits_type

Kojarzy nazwę typu z Tr parametr szablonu.

Funkcje członkowskie

Zamknij

Zamyka plik.

is_open

Wskazuje, czy plik jest otwarty.

Otwórz

Otwiera plik.

przepełnienie

Chronione funkcji wirtualnych może być wywoływana po wstawieniu nowego znaku do pełnego buforu.

pbackfail

Funkcja chroniony członek wirtualnego próbuje umieścić element z powrotem w strumieniu wejściowym, a następnie sprawiają, że bieżący element (wskazywany przez następne wskaźnik).

seekoff

Funkcja chroniony członek wirtualnego próbuje alter aktualnej pozycji dla kontrolowanego strumieni.

seekpos

Funkcja chroniony członek wirtualnego próbuje alter aktualnej pozycji dla kontrolowanego strumieni.

setbuf

Funkcja chroniony członek wirtualnego wykonuje zwłaszcza operacji do poszczególnych buforach strumienia pochodnej.

Zamień

Treść niniejszej wymiany basic_filebuf dla zawartości pod warunkiem basic_filebuf parametru.

Synchronizacja

Funkcja chronionych, wirtualne próbuje zsynchronizować kontrolowanego strumieni z skojarzone strumienie zewnętrznych.

uflow

Chronione funkcji wirtualnych, aby wyodrębnić bieżącego elementu z strumień wejściowy.

niedopełnienie

Chronione funkcji wirtualnych, aby wyodrębnić bieżącego elementu z strumień wejściowy.

Wymagania

Nagłówek:<fstream>

Przestrzeń nazw: std

Zobacz też

Informacje

Bezpieczeństwo wątku w standardowej bibliotece C++

iostream Programming

Konwencje iostream

Inne zasoby

<fstream> Członkowie

basic_filebuf członkowie