Класс basic_filebuf
Описывает буфер потока, элементы управления и элементов типа Elem, которого характеристики символа определяемые классом Tr, входящие и исходящие последовательности элементов, которые хранятся во внешнем файле.
template <class Elem, class Tr = char_traits<Elem> >
class basic_filebuf : public basic_streambuf<Elem, Tr>
Параметры
Elem
Базовый элемент файлового буфера.Tr
Характеристики базового элемента файлового буфера (обычно char_traits<Elem>).
Заметки
Класс шаблона описывает буфер потока, элементы управления и элементов типа Elem, которого характеристики символа определяемые классом Tr, входящие и исходящие последовательности элементов, которые хранятся во внешнем файле.
Примечание
Объекты типа basic_filebuf создаются с внутренний буфер типа char * независимо от char_type, указанный параметром типа Elem.Это означает, что строка, содержащая символы юникода ( wchar_t ) будет преобразована в строку, содержащую символы ANSI ( char ), прежде чем она будет записана на внутренний буфер.Для хранения строк юникода в буфере создайте новый буфер типа wchar_t и задайте его с помощью метода basic_streambuf::pubsetbuf().Чтобы просмотреть пример, демонстрирующий это расширение функциональности, см. ниже.
Объект класса basic_filebuf<Elem, Tr> сохраняет указатель файла, которое обозначает объект FILE, что элементы управления потока, связанного с открытием файла. Она также содержит указатели на 2 два преобразования файла для использования защищенными функции-членами переполнение и потеря значимости. Для получения дополнительной информации см. basic_filebuf::open.
Пример
В следующем примере показано, как применять объект типа basic_filebuf<wchar_t> на символы юникода магазина в своем внутреннем буфере путем вызова метода pubsetbuf().
// 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();
}
конструкторов;
Создает объект типа basic_filebuf. |
Определения типов
Связывает имя с параметром типа шаблона Elem. |
|
Делает этот тип в области basic_filebuf соответствующей типу с тем же именем в области Tr. |
|
Делает этот тип в области basic_filebuf соответствующей типу с тем же именем в области Tr. |
|
Делает этот тип в области basic_filebuf соответствующей типу с тем же именем в области Tr. |
|
Связывает имя с параметром типа шаблона Tr. |
Функции-члены
Закрывает файл. |
|
Указывает, является ли файл открыт. |
|
Открывает файл. |
|
Защищенная виртуальная функция, могут вызывать при новый символ вставляется в полный буфер. |
|
Защищенная виртуальная функция-член пытается перейти обратно в элемент входной поток и делает его текущего элемента (указанный следующему указателю). |
|
Защищенная виртуальная функция-член пытается изменить текущие позиции для управляемых потоков. |
|
Защищенная виртуальная функция-член пытается изменить текущие позиции для управляемых потоков. |
|
Защищенная виртуальная функция-член частность выполняет операции в каждый производный буфер потока. |
|
Меняет местами содержимое этого basic_filebuf для содержимого предоставленного параметра basic_filebuf. |
|
Защищенная, виртуальная функция пытается синхронизировать, управляемые потоки со всеми связанными внешними потоками. |
|
Защищенная, виртуальная функция для извлечения текущий элемент из входного потока. |
|
Защищенная, виртуальная функция для извлечения текущий элемент из входного потока. |
Требования
Заголовок:<fstream>
Пространство имен: std
См. также
Ссылки
Потокобезопасность в стандартной библиотеке C++