Rogue Wave バナー
前へマニュアルの先頭へ目次次へ

9.1 ファイルストリームとは

ファイルストリームでは、ファイルに対する入出力を行います。ただし、ファイル入出力用の C stdio 関数とは異なり、ファイルストリームは、「資源の収集は初期化である」という Stroustrup のイディオムに準拠しています。10 すなわち、ファイルストリームでは、ストリームの構築時にファイルを開くことができ、ファイルを破棄すると自動的に閉じるという利点があります。以下にコード例を示します。

void use_file(const char* fileName)
{
   FILE* f = fopen("fileName", "w");
   // ファイルを使用する
   fclose(f);
}

ここで、ファイルの使用時に例外が送出されると、ファイルは閉じなくなります。しかし、ファイルストリームの場合は、次の例のようにファイルストリームがなくなるとファイルが閉じます。

void use_file(const char* fileName)
{
   ofstream f("fileName");
   // ファイルを使用する
}

ここで、開かれたファイルの使用中に例外が発生すると、ファイルが閉じます。

ファイルストリームを実装するクラステンプレートは、basic_ifstream <charT,traits>basic_ofstream <charT,traits>basic_fstream <charT,traits> の 3 つです。これらのテンプレートは、ストリーム基底クラス basic_ios <charT, traits> から派生したものです。したがって、第 7 章で述べたように、ストリームの状態だけでなく、書式設定した入出力の関数はすべて継承します。また、ファイルを開閉する関数や、ファイルを開いてそれをストリームに接続するコンストラクタを備えます。標準定義の ifstreamofstreamfstream、およびワイド文字ファイルストリーム用の wifstreamwofstreamwfstream もあるので便利です。

バッファ処理は、特殊化されたストリームバッファクラス basic_filebuf <charT,traits> で行います。

9.1.1 定義済みストリームとファイルストリームとの違い

定義済みの標準ストリームとファイルストリームとの主な違いは、次のとおりです。

9.1.2 ワイド文字ストリームのコード変換

大型の文字セット環境では、ファイルには複数バイト文字を使用します。内部処理の際、そのようなファイルの中身をワイド文字シーケンスとして使用するために、wifstreamwofstream で必要な変換が行われます。実際の変換はファイルバッファに委託され、ファイルバッファでは組み込まれたロケールのコード規約ファセットにそのタスクを伝達します。


前へマニュアルの先頭へ目次次へ

Copyright (c) 1998, Rogue Wave Software, Inc.
このマニュアルに関する誤りのご指摘やご質問は、電子メールにてお送りください。


OEM リリース, 1998 年 6 月