2018年03月19日
《その341》 オープンモード
オープンモード
例えば、出力ストリーム ofstream を利用して、ファイル text.txt への書き込みを行うとした場合、ファイルのオープンには、
・コンストラクタによるファイルのオープン
ofstream fos("text.txt");
あるいは、
・メンバ関数 open によるファイルのオープン
ofstream fos;
fos.open("text.txt");
といった方法があります。
上記の方法でファイルオープンした場合、ファイルは切捨てモードでオープンされます。
切捨てモードでは、オープン時に、ファイルの既存の内容が消されます。
ファイル内容を消さずにファイルをオープンし、既存の内容の終端位置からの書き込みを行うことができます。
追加モードあるいはオープンモードと呼ばれるこのモードでファイルをオープンするには、
ofstream fos("text.txt", ios_base::app);
あるいは、
ofstream fos;
fos.open("text.txt", ios_base::app);
とします。
切捨てモードとの違いは、第2引数の ios_base::app です。
第2引数を省略すると、ios_base::trunc が既定値として渡され、切捨てモードになります。
下記のプログラムでは、
・ファイル text.txt の既存の内容を確認
・オープンモードで、既存の内容の終端位置からの追加書込み
・追加書込み後のファイル内容を確認
の順に処理を行っています。
以下は、プログラムです。
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
int main() {
// ------------------------------------
// ファイルの内容を読み込み、画面に表示
ifstream fis;
fis.open("text.txt");
if (!fis) {
cout << "ファイルをオープンできません。\n";
exit(1);
}
else {
cout << "【最初】\n";
for (;;) {
string tmp;
getline(fis, tmp);
if (!fis) break;
cout << tmp << '\n';
}
}
cout << '\n';
fis.close();
// ------------------------------------
// ------------------------------------
// 追加モードでファイルに書込み
ofstream fos;
fos.open("text.txt", ios_base::app);
if (!fos) {
cout << "ファイルをオープンできま"
"せん。\n";
exit(1);
}
else {
fos << "01234 56789\n";
fos << "KLMNO PQRST\n";
}
fos.close();
// ------------------------------------
// ------------------------------------
// ファイルの内容を読み込み、画面に表示
cout << "【書込み後】\n";
fis.open("text.txt");
if (!fis) {
cout << "ファイルをオープンできま"
"せん。\n";
exit(1);
}
else {
for (;;) {
string tmp;
getline(fis, tmp);
if (!fis) break;
cout << tmp << '\n';
}
}
// ------------------------------------
}
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/7454614
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック