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


Класс 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

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

Определения типов

char_type

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

int_type

Делает этот тип в области basic_filebuf соответствующей типу с тем же именем в области Tr.

off_type

Делает этот тип в области basic_filebuf соответствующей типу с тем же именем в области Tr.

pos_type

Делает этот тип в области basic_filebuf соответствующей типу с тем же именем в области Tr.

traits_type

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

Функции-члены

закрыть

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

is_open

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

open

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

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

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

pbackfail

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

seekoff

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

seekpos

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

setbuf

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

Буфер обмена

Меняет местами содержимое этого basic_filebuf для содержимого предоставленного параметра basic_filebuf.

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

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

uflow

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

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

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

Требования

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

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

См. также

Ссылки

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

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

Соглашения iostreams

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

члены<fstream>

члены basic_filebuf