Поделиться через


basic_filebuf Class

Описывает буфер потока, который управляет передачей элементов типа 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() метод.Чтобы увидеть пример, демонстрирующий это, см.

An object of class basic_filebuf<Elem, Tr> сохраняет указатель файла, который определяет FILE объект, управляющий поток, связанный с файлом, открытым.Также хранит указатели на двух аспектов преобразования файла для использования функций защищенный член переполнения и значимости.Дополнительные сведения см. в разделе 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();
}
  
  
  
  

tzf8k3z8.collapse_all(ru-ru,VS.110).gifКонструкторы

basic_filebuf

Создает объект типа basic_filebuf.

tzf8k3z8.collapse_all(ru-ru,VS.110).gifОпределения типов

char_type

Связывает имя типа с Elem параметр шаблона.

int_type

Делает этот тип в basic_filebufэквивалент типа с тем же именем в области Tr области.

off_type

Делает этот тип в basic_filebufэквивалент типа с тем же именем в области Tr области.

pos_type

Делает этот тип в basic_filebufэквивалент типа с тем же именем в области Tr области.

traits_type

Связывает имя типа с Tr параметр шаблона.

tzf8k3z8.collapse_all(ru-ru,VS.110).gifФункции-члены

Закрыть

Закрытие файла.

is_open

Указывает, является ли файл открытым.

открыть

Открытие файла.

переполнение

Защищенные виртуальной функции, которые могут вызываться при вставке нового знака в полный буфер.

pbackfail

Защищенный виртуальный член функция пытается поместить элемент в потоке входных данных, а затем сделать его текущего элемента (на которую ссылается указатель следующей).

seekoff

Защищенный виртуальный член функции пытается изменить текущее положение управляемых потоков.

seekpos

Защищенный виртуальный член функции пытается изменить текущее положение управляемых потоков.

setbuf

Защищенный виртуальный член функция выполняет операции, специфичные для каждого производного потока буфера.

Горячей замены

Заменяет содержимое этой basic_filebuf для содержимого из предоставляемых basic_filebuf параметр.

Синхронизация

Защищенной виртуальной функции пытается синхронизации управляемых потоков с связанные внешние потоки данных.

uflow

Защита виртуальной функции для извлечения текущего элемента из входного потока.

потеря значимости

Защита виртуальной функции для извлечения текущего элемента из входного потока.

Требования

Заголовок: <fstream>

Пространство имен: std

См. также

Ссылки

Потокобезопасность в стандартной библиотеке C++

программирование iostream

соглашения iostreams

Другие ресурсы

члены<fstream>

члены basic_filebuf