次の方法で共有


出力ファイル ストリームのメンバー関数

出力ストリームのメンバー関数は、マニピュレーターと同等のタイプ、書式設定されていない書き込み操作を実行するタイプ、それ以外はストリーム状態を変更し、同等のマニピュレーターまたは挿入演算子を持たないタイプの 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 メンバー関数は、ファイル位置を返します。 seekptellp に同等の入力ストリーム関数を使用する例については、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 と同等です。これは、ファイルの終わりをテストしないためです。

関連項目

出力ストリーム