C言語編でもファイル操作は説明しましたが、C++ではストリームを使ったファイル操作を行います。
ストリームを使うと言っても、ファイルを開く、閉じるといった概念自体が変わることはありません。
ちょっとした違いですので、慣れれば問題無く使えるようになります。
ファイルを使うためには、ファイルストリーム(fstream)をインクルードします。
ファイルストリームには、入力ストリームと出力ストリームがあります。
※コンソールに対する入力ストリーム(cin)と出力ストリーム(cout)と同じです。
では、出力ストリームを使ってデータをファイルに書き込んでみましょう。
<sample program cpp028-01>
#include <iostream> #include <fstream> int main() { std::ofstream ofsTest; return 0; } |
出力用のファイルストリームは「ofstream」と言います。
ファイルストリームも「名前空間std」に所属しています。
ファイルを開くには、ファイルストリームのopen関数を使います。
※前に触れましたが、メンバ関数というものです。
<sample program cpp028-02>
#include <iostream>
#include <fstream>
int main()
{
std::ofstream ofsTest;
ofsTest.open("Test.txt", std::ios::out);
if (!ofsTest) {
return 1;
}
return 0;
}
|
第1引数はファイル名で、第2引数は「モード」です。
モードはC言語のfopen関数でも指定する必要がありましたが、見た目が変わっています。
C言語 C++ "r" std::ios::in "w" std::ios::out "a" std::ios::app "b" std::ios::binary
エラーチェックもC言語の時とイメージは変わっていません。
<sample program cpp028-03>
#include <iostream>
#include <fstream>
int main()
{
std::ofstream ofsTest;
ofsTest.open("Test.txt", std::ios::out);
if (!ofsTest) {
return 1;
}
if (ofsTest.is_open()) {
ofsTest.close();
}
return 0;
}
|
ファイルが開いているかどうか、is_open関数で調べてから閉じています。
最後にデータの書き込みをやってみます。
これまでコンソールでの入出力をやってきましたから、見れば分かると思います。
<sample program cpp028-04>
#include <iostream>
#include <fstream>
int main()
{
std::ofstream ofsTest;
ofsTest.open("Test.txt", std::ios::out);
if (!ofsTest) {
return 1;
}
ofsTest << "Hello" << std::endl;
ofsTest << 123 << std::endl;
if (ofsTest.is_open()) {
ofsTest.close();
}
return 0;
}
|
<実行結果>
続行するには何かキーを押してください・・・
ストリームとしての機能は同じですから、「<<」でファイルに書き込む事が出来ます。
実行後に、プロジェクトフォルダを開き、「Test.txt」を開いてください。
このようになっていれば、成功です。
次回は、テキストファイルの読み込みについて説明します。