C++ファイル処理:オープン、読み込み、書き込み、クローズ操作をマスター
C++におけるファイル処理とは
ファイル処理により、プログラムデータをストレージデバイスに永続化できます。プログラム出力をファイルに出力することで、そのデータに対するさらなる操作、分析、アーカイブが可能になります。
ストリームは、文字の連続的なソースまたはデスティネーションを表す抽象化です。C++は堅牢なfstreamライブラリを提供し、ファイルをシームレスに扱うためのクラスと関数を提供しています。
このチュートリアルで学ぶ内容:
- C++におけるファイル処理の定義
fstreamライブラリとそのクラス- 様々なモードでのファイルオープン
- ファイルの安全なクローズ
- ファイルへのデータ書き込み
- ファイルからのデータ読み込み
fstreamライブラリ
fstreamライブラリは3つのコアクラスを提供します:
- ofstream – ファイルの作成と書き込み用の出力ストリーム
- ifstream – 既存ファイルの読み込み用の入力ストリーム
- fstream – 入力と出力の両方をサポートする結合ストリーム
以下はクイックリファレンスです:
これらのクラスを使用するには、fstreamヘッダをインクルードし、コンソール出力も必要ならiostreamもインクルードします。
ファイルのオープン方法
ファイル操作の前に、ファイルをオープンする必要があります。書き込み専用ならofstream、読み込み専用ならifstream、両方ならfstreamを使用します。各クラスはopen()メンバを提供します:
open(file_name, mode);
- file_name – 対象ファイルのパスまたは名前
- mode – オプション;アクセス種類を指定。主なフラグ:
| 値 | 説明 |
|---|---|
| ios::app | 追記モード – 書き込みがファイル末尾に追加される |
| ios::ate | オープンと同時に末尾へシーク |
| ios::in | 読み込み用にオープン |
| ios::out | 書き込み用にオープン |
| ios::trunc | 既存ファイルをゼロ長に切り詰める |
複数のフラグはビット演算子OR(|)で結合可能です。
例1:ファイルの作成
#include <iostream>
#include <fstream>
using namespace std;
int main() {
fstream my_file;
my_file.open("my_file", ios::out);
if (!my_file) {
cout << "File not created!";
} else {
cout << "File created successfully!";
my_file.close();
}
return 0;
}
出力:
実行中のプログラムのスクリーンショット:
コードウォークスルー:
- コンソールI/O用に
iostreamをインクルード - ファイルストリーム用に
fstreamをインクルード - 簡潔さのため
std名前空間を使用 my_fileという名前のfstreamオブジェクトをインスタンス化- 書き込みモード(
ios::out)でファイルをオープン - オープン成功をチェック;失敗なら失敗を報告
- 成功なら確認メッセージを出力しファイルをクローズ
- 正常終了を示す
0を返却
ファイルのクローズ方法
C++はプログラム終了時にストリームを自動的にフラッシュ・クローズしますが、最後の操作後に明示的にファイルをクローズすることは良い習慣とされます。
close()メンバはfstream、ofstream、ifstreamで利用可能です:
void close();
ファイルへの書き込み方法
書き込み操作にはストリーム挿入演算子(<<)を使用します。格納するテキストはクォートで囲むか直接ストリームします。
例2:テキストの書き込み
#include <iostream>
#include <fstream>
using namespace std;
int main() {
fstream my_file;
my_file.open("my_file.txt", ios::out);
if (!my_file) {
cout << "File not created!";
} else {
cout << "File created successfully!";
my_file << "Guru99";
my_file.close();
}
return 0;
}
出力:
コードのスクリーンショット:
コードウォークスルー:
- 必要なヘッダをインクルード
fstreamオブジェクトを作成- 対象ファイルを書き込みモードでオープン
- ファイルストリームを検証
- 文字列"Guru99"をファイルに挿入
- ストリームをクローズ
0を返却
ファイルからの読み込み方法
読み込みにはストリーム抽出演算子(>>)を使用します。cinと同様に、データが適切な型の変数にストリームされます。
例3:文字の読み込み
#include <iostream>
#include <fstream>
using namespace std;
int main() {
fstream my_file;
my_file.open("my_file.txt", ios::in);
if (!my_file) {
cout << "No such file";
} else {
char ch;
while (1) {
my_file >> ch;
if (my_file.eof()) break;
cout << ch;
}
}
my_file.close();
return 0;
}
出力:
実行中のコードのスクリーンショット:
コードウォークスルー:
iostreamとfstreamをインクルード- 読み込み用(
ios::in)にファイルをオープン - 存在チェック;存在しない場合はユーザーに通知
- EOFに達するまで文字を1つずつ読み込み
- 各文字をコンソールに出力
- ストリームをクローズ
0を返却
まとめ
- ファイル処理でプログラム出力を永続ストレージに保存
- ストリームが入出力デバイスを抽象化
fstreamライブラリが一般的なファイル操作用クラスを提供- ソース冒頭で必ず
<fstream>(必要なら<iostream>も)をインクルード - 適切なモードでファイルをオープンし、目的の操作を行い、ストリームをクローズ
C言語
- マイクロメーター完全ガイド:読み方・使い方・種類を徹底解説
- ミルファイル(平ヤスリ)完全ガイド:木工・金工の必須工具
- C言語 ファイル入出力: fopen, fprintf, fread, fseek をマスターする
- C++例外処理をマスター:try、catch、throwの実践例
- C 言語のコメント完全ガイド: 明確で効果的な注釈の書き方
- C言語ヘッダーファイルの理解:種類、使い方、ベストプラクティス
- C++ファイルI/O完全マスター:fstreamによる読み書き
- C++シグナル処理をマスター:安全な割り込み管理とクリーンなプログラム終了
- VHDLのTEXTIOライブラリでテキスト・ファイルからFPGAブロックRAMを初期化する
- PythonファイルI/O:入出力操作をマスターする
- Java BufferedReader でファイル読み込み:実践ガイドと例