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 、type パラメーターで指定されたElem。これは、Unicode 文字列を意味 (を含むwchar_t文字) を ANSI 文字列に変換されます (を含むchar文字) を内部バッファーに書き込まれる前に。Unicode 文字列をバッファーに格納するには、新しいバッファーの種類を作成します。 wchar_tとを使用して設定、 basic_streambuf::pubsetbuf()メソッド。この動作を示す例を参照するには、以下を参照してください。
An object of class basic_filebuf<Elem, Tr> 指定ファイルのポインターを格納する、 FILE 、開いているファイルに関連付けられたストリームを制御するオブジェクト。プロテクト メンバー関数での使用の 2 つのファイル変換ファセットへのポインターを格納オーバーフロー とアンダー フロー。詳細については、「basic_filebuf::open」を参照してください。
使用例
次の使用例は、型のオブジェクトを強制的に行う方法を示しています**basic_filebuf<wchar_t>**を呼び出すことにより、内部バッファー内の Unicode 文字を格納するのには、 **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。 |
Typedef
型名とを関連付けます、 Elemテンプレート パラメーター。 |
|
このタイプのようになりますbasic_filebufのと同じ種類で同じ名前のスコープはTrスコープ。 |
|
このタイプのようになりますbasic_filebufのと同じ種類で同じ名前のスコープはTrスコープ。 |
|
このタイプのようになりますbasic_filebufのと同じ種類で同じ名前のスコープはTrスコープ。 |
|
型名とを関連付けます、 Trテンプレート パラメーター。 |
メンバー関数
ファイルを閉じます。 |
|
ファイルが開いているかどうかを示します。 |
|
ファイルを開きます。 |
|
バッファーがいっぱいに、新しい文字を挿入したときに呼び出すことができますは、保護された仮想関数です。 |
|
保護された仮想メンバー関数は、入力ストリームに要素を戻すし、(次のポインターが指す) 現在の要素を確認しようとします。 |
|
保護された仮想メンバー関数は、制御されたストリームの現在位置を変更しようとします。 |
|
保護された仮想メンバー関数は、制御されたストリームの現在位置を変更しようとします。 |
|
各派生ストリーム バッファーには、操作固有の保護された仮想メンバー関数を実行します。 |
|
このコンテンツを交換basic_filebufは、提供されているbasic_filebufパラメーター。 |
|
保護されている、仮想関数は、関連付けられた外部ストリームと、制御されたストリームを同期しようとします。 |
|
保護された、入力ストリームから現在の要素を抽出するのには、仮想関数します。 |
|
保護された、入力ストリームから現在の要素を抽出するのには、仮想関数します。 |
必要条件
ヘッダー: <fstream>
名前空間: std