Sdílet prostřednictvím


basic_filebuf – třída

Popisuje proudu vyrovnávací paměti, který řídí přenos prvky typu Elem, jehož znak znaky jsou určeny třídy Tr, do a z pořadí prvků uložen v externím souboru.

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

Parametry

  • Elem
    Základní prvek souboru vyrovnávací paměti.

  • Tr
    Vlastnosti základního prvku vyrovnávací paměti pro soubor (obvykle char_traits<Elem>).

Poznámky

Popisuje šablony třídy proudu vyrovnávací paměti, který řídí přenos prvky typu Elem, jehož znak znaky jsou určeny třídy Tr, do a z pořadí prvků uložen v externím souboru.

[!POZNÁMKA]

Objekty typu basic_filebuf jsou vytvořeny s vnitřní vyrovnávací paměť typu char * bez ohledu na to char_type určený parametrem typu Elem.To znamená, že řetězec Unicode (obsahující wchar_t znaků) budou převedeny na řetězec ve formátu ANSI (obsahující char znaků) dříve, než je zapsán do vnitřní vyrovnávací paměti.Pro uložení řetězce Unicode ve vyrovnávací paměti, vytvořit nové vyrovnávací paměti typu wchar_t a nastavte ji pomocí basic_streambuf::pubsetbuf() metody.Chcete-li zobrazit příklad, který demonstruje toto chování, viz níže.

Objekt třídy basic_filebuf<Elem, Tr> ukládá ukazatel souboru, což znamená, že FILE objekt, který určuje datový proud přidružené k otevření souboru.Také ukládá odkazy na dvě charakteristiky převod souborů pro použití v chráněné členské funkce přetečení a podtečení.Další informace naleznete v tématu basic_filebuf::open.

Příklad

Následující příklad ukazuje, jak vynutit objekt typu basic_filebuf<wchar_t> k ukládání znaků Unicode do jeho vnitřní vyrovnávací paměti voláním 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();
}
  

Konstruktory

basic_filebuf

Vytvoří objekt typu basic_filebuf.

Typedefs

char_type

Přiřadí název typu se Elem parametr šablony.

int_type

Je tento typ v basic_filebufna odpovídající typ se stejným názvem v oboru Tr oboru.

off_type

Je tento typ v basic_filebufna odpovídající typ se stejným názvem v oboru Tr oboru.

pos_type

Je tento typ v basic_filebufna odpovídající typ se stejným názvem v oboru Tr oboru.

traits_type

Přiřadí název typu se Tr parametr šablony.

Členské funkce

Zavřít

Zavře soubor.

is_open

Označuje, zda je soubor otevřen.

Otevřít

Otevře soubor.

overflow

Chráněné virtuální funkce, která může být volána, když nový znak je vložen do plné vyrovnávací paměti.

pbackfail

Chráněné virtuální členskou funkci pokusí obnoven prvek vstupní datový proud a poté bude aktuální prvek (ukazující na další ukazatel).

seekoff

Chráněné virtuální členskou funkci se pokusí změnit aktuální umístění pro řízené proudy.

seekpos

Chráněné virtuální členskou funkci se pokusí změnit aktuální umístění pro řízené proudy.

setbuf

Chráněné virtuální členskou funkci provede operace specifické pro každé vyrovnávací paměti odvozené datový proud.

Odkládací

Obsah této výměny basic_filebuf obsahu poskytované basic_filebuf parametr.

synchronizace

Chráněné, virtuální funkce se pokusí synchronizovat řízené proudy se všechny přidružené externí datové proudy.

uflow

Chráněné virtuální funkce extrahovat aktuální prvek ze vstupního datového proudu.

podtečení

Chráněné virtuální funkce extrahovat aktuální prvek ze vstupního datového proudu.

Požadavky

Záhlaví:<fstream>

Obor názvů: std

Viz také

Referenční dokumentace

Bezpečný přístup z více vláken ve standardní knihovně C++

iostream – programování

iostreams – konvence

Další zdroje

<fstream> Členové

basic_filebuf členů