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
Vytvoří objekt typu basic_filebuf. |
Typedefs
Přiřadí název typu se Elem parametr šablony. |
|
Je tento typ v basic_filebufna odpovídající typ se stejným názvem v oboru Tr oboru. |
|
Je tento typ v basic_filebufna odpovídající typ se stejným názvem v oboru Tr oboru. |
|
Je tento typ v basic_filebufna odpovídající typ se stejným názvem v oboru Tr oboru. |
|
Přiřadí název typu se Tr parametr šablony. |
Členské funkce
Zavře soubor. |
|
Označuje, zda je soubor otevřen. |
|
Otevře soubor. |
|
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. |
|
Chráněné virtuální členskou funkci pokusí obnoven prvek vstupní datový proud a poté bude aktuální prvek (ukazující na další ukazatel). |
|
Chráněné virtuální členskou funkci se pokusí změnit aktuální umístění pro řízené proudy. |
|
Chráněné virtuální členskou funkci se pokusí změnit aktuální umístění pro řízené proudy. |
|
Chráněné virtuální členskou funkci provede operace specifické pro každé vyrovnávací paměti odvozené datový proud. |
|
Obsah této výměny basic_filebuf obsahu poskytované basic_filebuf parametr. |
|
Chráněné, virtuální funkce se pokusí synchronizovat řízené proudy se všechny přidružené externí datové proudy. |
|
Chráněné virtuální funkce extrahovat aktuální prvek ze vstupního datového proudu. |
|
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++