第13回 ファイルの操作
はじめに
前回は、異なる種類のデータをまとめて管理するための構造体について学びました。
構造体を使用することで、
- 名前
- 年齢
- 点数
など、関連する複数のデータを一つのまとまりとして扱えるようになりました。
しかし、これまで作成したプログラムには大きな問題があります。
それは、
プログラムを終了すると、保存していたデータが消えてしまう
ということです。
例えば、次のようなプログラムを考えます。
int score = 100;
このscoreという変数は、プログラムを実行している間は値を保持しています。
しかし、プログラムを終了すると、変数のデータは失われます。
そこで使用するのがファイルです。
ファイルを利用すると、プログラムの外部へデータを保存し、後から読み込むことができます。
今回の到達目標
- ファイル操作の必要性を理解する。
- ファイルへデータを書き込める。
- ファイルからデータを読み込める。
- ファイル操作の基本的な流れを理解する。
ファイルとは
ファイルとは、コンピュータ上にデータを保存しておくためのものです。
例えば、
- テキストファイル
- 画像ファイル
- 音声ファイル
など、さまざまな種類があります。
C++では、ファイルを利用することでプログラムで扱ったデータを保存できます。
例えば、
- ゲームのセーブデータ
- 設定情報
- 成績データ
などを保存することができます。
ファイル操作の準備
C++でファイルを扱うには、
#include <fstream>
を追加します。
fstreamは、ファイル操作を行うための機能を提供するヘッダファイルです。
ファイルへデータを書き込む
ファイルへデータを書き込むには、
std::ofstream
を使用します。
ofstreamは、
ファイルへデータを出力するための機能
です。
例:
#include <fstream>
int main()
{
std::ofstream file("data.txt");
file << "Hello C++";
file.close();
}
実行すると、
data.txt
というファイルが作成され、
中には、
Hello C++
と保存されます。
ファイルを閉じる
ファイル操作が終了したら、
file.close();
を使用してファイルを閉じます。
ファイルを開いたままにすると、
- データが正しく保存されない
- 他の処理で使用できない
などの問題が発生する場合があります。
そのため、使用後は閉じることが重要です。
ファイルへ変数を書き込む
ファイルには、変数の値を書き込むこともできます。
#include <fstream>
#include <string>
int main()
{
std::string name = "Taro";
int score = 90;
std::ofstream file("score.txt");
file << name << std::endl;
file << score;
file.close();
}
作成されたscore.txtには、
Taro
90
と保存されます。
ファイルからデータを読み込む
保存したデータを利用するには、ファイルから読み込みます。
ファイルの読み込みには、
std::ifstream
を使用します。
ifstreamは、
ファイルからデータを入力するための機能
です。
例:
#include <iostream>
#include <fstream>
#include <string>
int main()
{
std::ifstream file("data.txt");
std::string text;
file >> text;
std::cout << text;
file.close();
}
実行結果
Hello
ファイルに保存されていた文字列を読み込み、表示しています。
1行読み込む
std::cinと同じように、>>を使用すると空白までしか読み込みません。
例えば、
Hello C++
というデータがある場合、
file >> text;
では、
Hello
だけが読み込まれます。
1行全体を読み込みたい場合は、
std::getline()
を使用します。
例:
std::getline(file, text);
これにより、空白を含めた1行分のデータを読み込むことができます。
ファイルが開けたか確認する
ファイル操作では、指定したファイルが存在しない場合などに開けないことがあります。
そのため、ファイルを開けたか確認することが重要です。
例:
#include <iostream>
#include <fstream>
int main()
{
std::ifstream file("data.txt");
if (!file)
{
std::cout << "ファイルを開けません";
}
}
fileが正しく開けなかった場合、条件式がtrueになります。
構造体とファイル操作
第12回で学んだ構造体も、ファイル操作と組み合わせることができます。
例えば、
struct Student
{
std::string name;
int score;
};
のような学生情報を作成し、
- 名前
- 点数
をファイルへ保存できます。
このように、
構造体 → データをまとめる
ファイル → データを保存する
という役割を組み合わせることで、より実用的なプログラムを作成できます。
ファイル操作の流れ
ファイル操作は基本的に次の流れで行います。
1. ファイルを開く
↓
2. データを読み書きする
↓
3. ファイルを閉じる
この流れを意識することが重要です。
まとめ
今回は、データを保存するためのファイル操作について学びました。
- 変数や配列のデータはプログラム終了時に消えます。
- ファイルを使用するとデータを保存できます。
ofstreamを使用するとファイルへ書き込めます。ifstreamを使用するとファイルから読み込めます。- ファイル操作後は
close()でファイルを閉じます。 - ファイルを開けたか確認することが重要です。
ファイル操作を利用することで、プログラムの外部へデータを保存できるようになりました。
次回は、必要な大きさのメモリを動的に確保するための動的メモリ確保について学びます。