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_type 指定的类型 char * 内部缓冲区 Elem。这就意味着包含 Unicode 字符串 ( wchar_t 字符) 将转换为 ANSI 字符串 (包含 char 字符),在写入内部缓冲区之前。使用 basic_streambuf::pubsetbuf() 方法,需要存储缓冲区中 Unicode 字符串,请创建新的 wchar_t 类型的缓冲区并将其设置为。若要查看此行为的示例演示,请参见下文。

basic_filebuf<的Elem,Tr> 对象存储了文件指针,将 FILE 与对象流打开文件的控件。 它还存储指向两个转换文件供保护成员的函数 溢出下溢和使用。 有关详细信息,请参阅basic_filebuf::open

示例

下面的示例演示了其内部存储在缓冲区的 Unicode 字符演示如何强制类型 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 类型的对象。

Typedef

char_type

将类型名称与 Elem 模板参数。

int_type

执行在 basic_filebuf 范围内该类型等效与同名的类型将 Tr 范围的。

off_type

执行在 basic_filebuf 范围内该类型等效与同名的类型将 Tr 范围的。

pos_type

执行在 basic_filebuf 范围内该类型等效与同名的类型将 Tr 范围的。

traits_type

将类型名称与 Tr 模板参数。

成员函数

关闭

关闭一个文件。

is_open

指示文件是否处于打开状态。

打开

打开文件。

Overflow — 溢出

可以调用的受保护的虚函数,当新的完整字符插入到的缓冲区。

pbackfail

受保护的虚成员函数尝试放回元素放入内容,然后使它成为当前元素 (指向的指针) 下。

seekoff

受保护的虚成员函数尝试修改控制流中的当前位置。

seekpos

受保护的虚成员函数尝试修改控制流中的当前位置。

setbuf

受保护的虚成员函数执行一种操作特定到每个派生的流缓冲区。

交换

提供的 basic_filebuf 参数的内容交换此 basic_filebuf 内容。

同步

保护的,虚函数尝试同步的所有与外部的控制流。流

uflow

保护的,虚函数提取输入流中的当前元素。

下溢

保护的,虚函数提取输入流中的当前元素。

要求

页眉: <fstream>

命名空间: std

请参见

参考

C++ 标准库中的线程安全

iostream 编程

iostreams 约定

其他资源

fstream 成员

basic_filebuf 成员