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

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

この記事では、ファイルにテキストを追加する複数の 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 <iostream>
#include <fstream>

using std::cout; using std::ofstream;
using std::endl; 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 <iostream>
#include <fstream>

using std::cout; using std::fstream;
using std::endl; 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 <iostream>
#include <fstream>

using std::cout; using std::fstream;
using std::endl; 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;
}

関連記事 - C++ File

  • C++ でディレクトリ内のファイルの一覧を取得する方法
  • comments powered by Disqus