Sdílet prostřednictvím


basic_filebuf Class

Popisuje datový proud vyrovnávací paměť, která řídí přenos prvky typu Elem, jehož znaky znakem jsou určena třída Tr, do a z pořadí prvků, které jsou uloženy 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 vyrovnávací paměti souboru.

  • Tr
    Vlastnosti základní prvek vyrovnávací paměti souboru (obvykle char_traits<Elem>).

Poznámky

Popisuje šablony třídy datového proudu vyrovnávací paměť, která řídí přenos prvky typu Elem, jehož znaky znakem jsou určena třída Tr, do a z pořadí prvků, které jsou uloženy v externím souboru.

[!POZNÁMKA]

Objekty typu basic_filebuf jsou vytvořeny s vnitřní vyrovnávací paměť typu char * bez ohledu char_type určeného parametrem typu Elem.To znamená, že řetězec Unicode (obsahující wchar_t znaků) bude převeden na řetězec ANSI (obsahující char znaků) před zapsáním do vnitřní vyrovnávací paměti.Chcete-li uložit vyrovnávací paměť řetězce Unicode, vytvořit nové vyrovnávací paměti typu wchar_t a nastavte ji pomocí basic_streambuf::pubsetbuf() metoda.Příklad, který demonstruje toto chování, viz níže.

An object of class basic_filebuf<Elem, Tr> uloží ukazatel souboru, což znamená, že FILE objekt, který ovládá proud přidružené k otevření souboru.Také ukládá odkazy na dvě charakteristiky převodu souboru pro použití pomocí funkcí chráněný člen 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 uložení znaků Unicode v jeho vnitřní vyrovnávací paměti voláním pubsetbuf() metoda.

// 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(cs-cz,VS.110).gifKonstruktory

basic_filebuf

Vytvoří objekt typu basic_filebuf.

tzf8k3z8.collapse_all(cs-cz,VS.110).gifFunkce TypeDef

char_type

Název typu se připojí Elem parametr šablony.

int_type

Umožňuje v rámci tohoto typu basic_filebufa odpovídající typ se stejným názvem v oboru Tr oboru.

off_type

Umožňuje v rámci tohoto typu basic_filebufa odpovídající typ se stejným názvem v oboru Tr oboru.

pos_type

Umožňuje v rámci tohoto typu basic_filebufa odpovídající typ se stejným názvem v oboru Tr oboru.

traits_type

Název typu se připojí Tr parametr šablony.

tzf8k3z8.collapse_all(cs-cz,VS.110).gifFunkce členů

Zavřít

Soubor zavře.

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 vyvolána při nový znak je vložen v celé vyrovnávací paměti.

pbackfail

Chráněné virtuální členské funkce se pokusí umístit prvek zpět do vstupní proud a proveďte jeho aktuální prvek (špičaté další ukazatel).

seekoff

Chráněné virtuální členské funkce se pokusí změnit aktuální pozice pro řízené datové proudy.

seekpos

Chráněné virtuální členské funkce se pokusí změnit aktuální pozice pro řízené datové proudy.

setbuf

Funkce virtuální chráněný člen provádí zejména operaci na každé vyrovnávací paměti datového proudu odvozené.

Zaměnit

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

synchronizace

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

uflow

Chráněné virtuálních funkcí extrahovat z vstupní proud aktuální prvek.

podtečení

Chráněné virtuálních funkcí extrahovat z vstupní proud aktuální prvek.

Požadavky

Záhlaví: <fstream>

Obor názvů: std

Viz také

Referenční dokumentace

Bezpečnostní vlákno v Standardní knihovna C++

iostream programování

iostreams konvence

Další zdroje

<fstream> Členové

basic_filebuf členů