22.1 ファイルストリーム
#include <fstream>
ifstream fin;
ofstream fout;
fstream fbooth;
22.2 ファイル処理の手順
/* ファイルオープン */
省略
/* ファイルクローズ */
省略
/* ファイルオープンの記述 */
ifstream fin;
fin.open("mydata.txt");
if (!fin) {
(エラー処理)
}
(ファイル入力を処理する)
fin.close();
オブジェクト宣言時にファイルオープンする
ifstream fin("mydata.txt");
if (!fin) {
(エラー処理)
}
/* ファイル名指定に'/'を使う */
"c:txtdirnote.txt" // NG
"c:txtdirnote.txt" // OK
"c:/txtdir/note.txt" // OK
22.3 ファイル入出力を行う
/* データ入出力方法 */
省略
/* 1入出力を行なう */
/* 文字列入出力を行なう */
/* ファイルから「>>」で文字列読み込みする */
/* テキストモードとバイナリモード */
省略
/* バイナリ処理をする */
/* 追加モードを使う */
/* 更新モードを使う */
/* 入出力モードを使う */
22.4 エラー処理
/* ストリームオブジェクトの値をチェックする */
if(fin) // 正しければ
if(!fin) // エラーなら
/* エラーチェック用メンバ関数 */
good() // ストリームが正常状態である
bad() // 重大な入出力エラーが発生(重大エラー)
fail() // 回復可能な入出力エラーが発生(軽いエラー)
eof() // ファイルの終わり
clear() // ストリームの終わりにエラーフラグを設定またはクリアする
/* eof関数を使う */
while (true) {
fin.get(ch);
if (fin.eof()) {
break;
}
cout << ch;
}
/* エラー情報のクリア */
22.5 ブロックリードライト
22.6 先読みと1文字戻し
22.7 ランダムファイル処理
/* シーケンシャルファイル処理とランダムファイル処理 */
ランダムファイル処理はseekg()/seekp()関数で行う。
/* seekgとseekp関数 */
省略
/* ランダム処理とファイルモード */
fin.seekg(0, ios_base::beg); // ストリームfinの先頭に移動
fin.seekg(10, ios_base::beg); // ストリームfinの先頭から10文字目に移動
fin.seekg(0, ios_base::end); // ストリームfinの終端に移動
fin.seekg(-5, ios_base::end); // ストリームfinの終端から5文字前に移動
fin.seekg(10, ios_base::cur); // ストリームfinの現在位置(今度読み書き予定の位置)から10文字後ろに移動
fin.seekg(-10, ios_base::cur); // ストリームfinの現在位置から10文字前に移動
long pos;
pos = fin.tellg();
fin.seekg(pos); // ストリームfinの前回位置に復帰
/* ランダムファイル処理の実際 */