出力ファイル ストリームのメンバー関数
出力ストリームのメンバー関数は、マニピュレーターと同等のタイプ、書式設定されていない書き込み操作を実行するタイプ、それ以外はストリーム状態を変更し、同等のマニピュレーターまたは挿入演算子を持たないタイプの 3 つがあります。 書式設定された順次出力の場合、挿入演算子とマニピュレーターのみを使用することがあります。 ランダム アクセス バイナリ ディスク出力の場合、挿入演算子の有無を問わず、他のメンバー関数を使用します。
出力ストリームの open 関数
出力ファイル ストリーム (ofstream
) を使用するには、コンストラクターまたは open
関数で、そのストリームを特定のディスク ファイルに関連付ける必要があります。 open
関数を使用する場合、一連のファイルで同じストリーム オブジェクトを再利用できます。 いずれの場合も、ファイルを記述する引数は同じです。
出力ストリームに関連付けられているファイルを開く場合、通常は open_mode
フラグを指定します。 ios
クラスで列挙子として定義されているこれらのフラグを、ビットごとの OR ( |
) 演算子と組み合わせることができます。 列挙子の一覧については、「ios_base::openmode
」を参照してください。
3 つの一般的な出力ストリームの状況では、モード オプションが関連します。
ファイルを作成します。 ファイルが既に存在する場合は、古いバージョンが削除されます。
ofstream ofile("FILENAME"); // Default is ios::out ofstream ofile("FILENAME", ios::out); // Equivalent to above
既存のファイルにレコードを追加するか、存在しない場合はファイルを作成します。
ofstream ofile("FILENAME", ios::app);
同じストリームで一度に 1 つずつ、2 のファイルを開きます。
ofstream ofile(); ofile.open("FILE1", ios::in); // Do some output ofile.close(); // FILE1 closed ofile.open("FILE2", ios::in); // Do some more output ofile.close(); // FILE2 closed // When ofile goes out of scope it is destroyed.
put
関数
put
関数は、1 つの文字を出力ストリームに書き込みます。 次の 2 つのステートメントは既定では同じですが、2 番目は、ストリームの format 引数の影響を受けます。
cout.put('A');
// Exactly one character written
cout <<'A'; // Format arguments 'width' and 'fill' apply
write
関数
write
関数は、出力ファイル ストリームにメモリ ブロックを書き込みます。 length 引数は、書き込まれるバイト数を指定します。 この例は、出力ファイル ストリームを作成し、Date
構造体のバイナリ値をそれに書き込みます。
// write_function.cpp
// compile with: /EHsc
#include <fstream>
using namespace std;
struct Date
{
int mo, da, yr;
};
int main( )
{
Date dt = { 6, 10, 92 };
ofstream tfile( "date.dat" , ios::binary );
tfile.write( (char *) &dt, sizeof dt );
}
write
関数は NULL
文字に達しても停止しないため、完全なクラス構造が記述されます。 関数は、char
ポインターと、書き込む文字のカウントという 2 つの引数を取ります。 構造体オブジェクトのアドレスの前にある char *
への必須のキャストに注意してください。
seekp 関数と tellp 関数
出力ファイル ストリームは、データを次に書き込む位置を指す内部ポインターを保持します。 seekp
メンバー関数は、このポインターを設定し、それによりランダム アクセス ディスク ファイル出力を提供します。 tellp
メンバー関数は、ファイル位置を返します。 seekp
と tellp
に同等の入力ストリーム関数を使用する例については、seekg
関数と tellg
関数を参照してください。
出力ストリームの close 関数
close
メンバー関数は、出力ファイル ストリームに関連付けられているディスク ファイルを閉じます。 すべてのディスク出力を完了するには、ファイルを閉じる必要があります。 必要に応じて、ofstream
デストラクターによってファイルが閉じられますが、同じストリーム オブジェクトの別のファイルを開く必要がある場合は close
関数を使用できます。
出力ストリーム デストラクターが自動的にストリームのファイルを閉じるのは、コンストラクターまたは open
メンバー関数がファイルを開いた場合のみです。 コンストラクターを既に開いているファイルのファイル記述子に渡すか、attach
メンバー関数を使用する場合は、ファイルを明示的に閉じる必要があります。
エラー処理関数
ストリームへの書き込み中にエラーがないかテストするには、これらのメンバー関数を使用します。
機能 | 戻り値 |
---|---|
bad |
回復不可能なエラーがある場合は true を返します。 |
fail |
回復不可能なエラーがある場合、または変換エラーなどの "予想された" 状態である場合、またはファイルが見つからない場合は true を返します。 多くの場合、0 個の引数を指定して clear を呼び出した後、処理を再開できます。 |
good |
エラー条件 (回復不可能かどうかを問わず) がなく、ファイルの終わりフラグが設定されていない場合は true を返します。 |
eof |
ファイルの終わり条件で true を返します。 |
clear |
内部エラー状態を設定します。 既定の引数を指定して呼び出すと、すべてのエラー ビットがクリアされます。 |
[rdstate ](basic-ios-class.md#rdstate |
現在のエラー状態を返します。 |
!
演算子が、fail
関数と同じ関数を実行するためにオーバーロードされます。 したがって次のような式があるとします。
if(!cout)...
は以下に匹敵します。
if(cout.fail())...
void*()
演算子は、!
演算子の反対を実行するものとしてオーバーロードされます。したがって次のような式があるとします。
if(cout)...
上の式は、下の式と同等です。
if(!cout.fail())...
void*()
演算子は、good
と同等です。これは、ファイルの終わりをテストしないためです。