C++ でファイルにテキストを追加する方法

胡金庫 2023年10月12日
  1. テキストをファイルに追加するには std::ofstreamopen() メソッドを使用する
  2. ファイルにテキストを追加するには std::fstreamopen() メソッドを使用する
  3. ファイルにテキストを追加するには std::fstreamopen() を使って write() メソッドを使用する
C++ でファイルにテキストを追加する方法

この記事では、ファイルにテキストを追加する複数の C++ メソッドを紹介します。

テキストをファイルに追加するには std::ofstreamopen() メソッドを使用する

まず、ofstream オブジェクトを作成し、そのメンバ関数 open を呼び出す。このメソッドは第 1 引数にファイル名を string オブジェクトとして渡します。第 2 引数として、以下の表に示すように、定義済みの定数を指定してオープンモードを渡すことができます。

定数 説明
std::ios_base::app 各書き込みの前にストリームの最後までシーク
std::ios_base::binary バイナリオープン
std::ios_base::in 読むためにファイルを開く
std::ios_base::out 書き込み用にファイルを開く
std::ios_base::trunc 開くときにストリームの内容を破棄します
std::ios_base::ate オープン直後にストリームの端をシーク

以下のコードサンプルでは、現在の作業ディレクトリに tmp.txt という名前のファイルが作成されていることに注意してください。作成するファイルのフルパスを渡したり、別の場所に追加したりすることができます。

#include <fstream>
#include <iostream>

using std::cout;
using std::endl;
using std::ofstream;
using std::string;

int main() {
  string filename("tmp.txt");
  ofstream file_out;

  file_out.open(filename, std::ios_base::app);
  file_out << "Some random text to append." << endl;
  cout << "Done !" << endl;

  return EXIT_SUCCESS;
}

出力:

Done !

ファイルにテキストを追加するには std::fstreamopen() メソッドを使用する

別の方法として、fstream を使って先ほどの例を実装することもできます。このメソッドはファイルストリームを操作するための普遍的な方法です。また、is_open を呼び出した場合には、ストリームが指定したファイルに関連付けられているかどうかを確認するバリデーションも追加しています。

#include <fstream>
#include <iostream>

using std::cout;
using std::endl;
using std::fstream;
using std::string;

int main() {
  string filename("tmp.txt");
  fstream file;

  file.open(filename, std::ios_base::app | std::ios_base::in);
  if (file.is_open()) file << "Some random text to append." << endl;
  cout << "Done !" << endl;

  return EXIT_SUCCESS;
}

ファイルにテキストを追加するには std::fstreamopen() を使って write() メソッドを使用する

この問題を解決するもう一つの方法は、以前の例で行ったように << 演算子を使用するのではなく、fstream オブジェクトから明示的に write メンバ関数を呼び出すことです。ほとんどのシナリオではこの方法の方が高速ですが、厳密な性能要件がある場合は、常にコードをプロファイルしてタイミングを比較するようにしてください。

#include <fstream>
#include <iostream>

using std::cout;
using std::endl;
using std::fstream;
using std::string;

int main() {
  string text("Some huge text to be appended");
  string filename("tmp.txt");
  fstream file;

  file.open(filename, std::ios_base::app);
  if (file.is_open()) file.write(text.data(), text.size());
  cout << "Done !" << endl;

  return EXIT_SUCCESS;
}
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ File