Udostępnij za pośrednictwem


basic_filebuf Class

Opisuje buforu strumienia, który kontroluje przekazywania elementów typu Elem, których cechy znaków są określane przez klasę Tr, do i z sekwencji elementów przechowywanych w pliku zewnętrznym.

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

Parametry

  • Elem
    Podstawowy element bufor plików.

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

Uwagi

Klasa szablonu opisuje buforu strumienia, który kontroluje przekazywania elementów typu Elem, których cechy znaków są określane przez klasę Tr, do i z sekwencji elementów przechowywanych w pliku zewnętrznego.

[!UWAGA]

Obiekty typu basic_filebuf są tworzone z wewnętrznego buforu typu char * niezależnie od char_type określonego 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 wewnętrznego buforu.Do przechowywania ciągów znaków Unicode w buforze, należy utworzyć nowe bufora typu wchar_t i ustaw ją za pomocą basic_streambuf::pubsetbuf() metody.Aby zobaczyć przykład demonstrujący ten problem, zobacz poniżej.

An object of class basic_filebuf<Elem, Tr> przechowuje wskaźnik pliku, który wyznacza FILE obiekt, który kontroluje strumienia skojarzonych z otwartego pliku.Również przechowywane są wskaźniki do dwa aspekty konwersji pliku do użycia przez funkcje chroniony członek przepełnienie i niedomiar.Aby uzyskać więcej informacji, zobacz basic_filebuf::open.

Przykład

Poniższy przykład demonstruje, jak wymusić obiektu typu basic_filebuf<wchar_t> do przechowywania znaków Unicode w jego wewnętrznego buforu, wywołując 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();
}
  
  
  
  

tzf8k3z8.collapse_all(pl-pl,VS.110).gifKonstruktory

basic_filebuf

Tworzy obiekt typu basic_filebuf.

tzf8k3z8.collapse_all(pl-pl,VS.110).gifDefinicje TypeDef

char_type

Kojarzy nazwę typu z Elem parametr szablonu.

int_type

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

off_type

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

pos_type

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

traits_type

Kojarzy nazwę typu z Tr parametr szablonu.

tzf8k3z8.collapse_all(pl-pl,VS.110).gifFunkcje składowe

Zamknij

Zamyka plik.

is_open

Wskazuje, czy plik jest otwarty.

Otwórz

Otwiera plik.

przepełnienie

Chronione funkcję wirtualną można wywołać, po wstawieniu nowego znaku do pełnego buforu.

pbackfail

Funkcja chroniony członek wirtualnego stara się przesunąć element do strumienia wejściowego, a następnie wykonać ją bieżącego elementu (wskazywanej przez wskaźnik dalej).

seekoff

Funkcja chroniony członek wirtualnego próbuje zmienić dla bieżącej pozycji kontrolowanych strumieni.

seekpos

Funkcja chroniony członek wirtualnego próbuje zmienić dla bieżącej pozycji kontrolowanych strumieni.

setbuf

Funkcja chroniony członek wirtualnego wykonuje szczególności operacji do każdego strumienia pochodnych buforu.

Zamień

Zawartość niniejszej wymiany basic_filebuf dla zawartości dołączonym basic_filebuf parametru.

Synchronizacja

Funkcja chronionych, wirtualne próbuje zsynchronizować kontrolowanych strumieni wszelkie skojarzone strumieni zewnętrznych.

uflow

Chronione funkcję wirtualną, aby wyodrębnić bieżącego elementu ze strumienia wejściowego.

niedomiar

Chronione funkcję wirtualną, aby wyodrębnić bieżącego elementu ze strumienia wejściowego.

Wymagania

Nagłówek: <fstream>

Obszar nazw: std

Zobacz też

Informacje

Bezpieczeństwo wątków w standardowa biblioteka języka C++

iostream Programowanie

iostreams Konwencji

Inne zasoby

<fstream> Członkowie

basic_filebuf członkowie