HOWTO · C++

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

この記事では、C++ でファイルにテキストを追加する方法を説明します。

このページの内容

ファイルの操作はプログラミングにおける一般的な作業であり、C++ にはファイル操作のための強力なツールが用意されています。一般的な操作の 1 つが、既存のファイルへのテキストの追加です。

この記事では、これを実現するための複数の方法を取り上げ、コード例と説明を通して、その過程を十分に理解できるよう解説します。

ファイルにテキストを追加するには ofstream と std::ios::app フラグを使用する

C++ では、std::ofstream クラスは Standard Template Library (STL) の一部であり、ファイルへの書き込みに使用されます。テキストファイルの作成、オープン、書き込み、データの追加を行いたい場合に最適です。

さらに、std::ios::app フラグは std::ofstream の重要な構成要素です。これを使用すると、ストリームに対してファイルを追記モードで開くよう指示します。つまり、ストリームに書き込んだデータはすべて、既存のファイル内容の末尾に追加されます。

ファイルが存在しない場合は、作成されます。

では、std::ofstream と std::ios::app フラグを使用して C++ でファイルにテキストを追加するには、次の手順に従います。

  • 必要なヘッダーファイルをインクルードします:
    #include <fstream>
    #include <iostream>
    
  • std::ofstream オブジェクトを使用して、ファイルを追記モード (std::ios::app) で開きます。
  • << 演算子を使用して、ファイルに追加したいテキストを書き込みます。
  • 完了したらファイルを閉じます。

以下が例です:

#include <fstream>
#include <iostream>

int main() {
  // File path
  std::string filePath = "example.txt";

  // Open the file in append mode
  std::ofstream outputFile(filePath, std::ios::app);

  if (!outputFile) {
    std::cerr << "Failed to open the file for appending." << std::endl;
    return 1;
  }

  // Text to append to the file
  std::string textToAppend = "This is some appended text.";

  // Append the text to the file
  outputFile << textToAppend << std::endl;

  // Close the file
  outputFile.close();

  std::cout << "Text appended to the file successfully." << std::endl;

  return 0;
}

この例では、まず std::ios::app を使用してファイル example.txt を追記モードで開きました。ファイルが存在しない場合は、作成されます。

次に、<< 演算子を使用して指定したテキストをファイルに追加し、最後にファイルを閉じました。

ファイルが開けない場合に対処できるよう、例に示すように、ファイルを開く際にはエラーをチェックするようにしてください。

ファイルにテキストを追加するには fstream と std::ios::app フラグを使用する

ofstream のアプローチと同様に、std::fstream と std::ios::app フラグを使用して、読み取りと追記の両方のためにファイルを開くことができます。

C++ では、std::fstream クラスは Standard Template Library (STL) の一部であり、ファイルの入出力に使用されます。テキストファイルの作成、オープン、書き込み、データの追加が必要な場合にも最適です。

std::ios::app フラグは std::fstream の重要な構成要素です。これを適用すると、ストリームに対してファイルを追記モードで開くよう指示します。

このモードでは、ストリームに書き込まれたデータはすべて、既存のファイル内容の末尾に追加されます。ファイルが存在しない場合は、作成されます。

std::fstream と std::ios::app フラグを使用して C++ でファイルにテキストを追加するには、次の手順に従います。

  • 必要なヘッダーをインクルードします:
    #include <fstream>
    #include <iostream>
    #include <string>
    
  • std::fstream オブジェクトを作成し、ファイルを追記モードで開きます:
    std::fstream file("example.txt", std::ios::app);
    
  • if (!file.is_open()) を使用して、ファイルが正常に開かれたかどうかを確認します。
  • file << textToAppend << std::endl; を使用してファイルにテキストを追加します。textToAppend は任意のテキストに置き換えてください。
  • 完了したら file.close(); でファイルを閉じます。

以下が完全な例です:

#include <fstream>
#include <iostream>
#include <string>

int main() {
  // Open the file in append mode
  std::fstream file("example.txt", std::ios::app);

  // Check if the file is opened successfully
  if (!file.is_open()) {
    std::cerr << "Error opening the file!" << std::endl;
    return 1;  // Exit with an error code
  }

  // Text to append
  std::string textToAppend = "This is the text to append.";

  // Append text to the file
  file << textToAppend << std::endl;

  // Close the file
  file.close();

  return 0;
}

このコードは、ファイルを追記モードで開き、指定したテキストを追加した後、ファイルを閉じます。

ファイルが存在しない場合は作成されます。存在する場合は、既存の内容を上書きすることなく、新しい内容がファイルの末尾に追加されます。

ファイルにテキストを追加するにはフラグなしの std::ofstream を使用する

新しいファイルを作成したり、既存の内容を上書きしたりしたい場合は、フラグなしで std::ofstream を使用できます。ファイルが既に存在する場合、その内容は事実上消去され、まっさらな状態から始まります。

以下が基本的な例です:

#include <fstream>
#include <iostream>

int main() {
  // Creating a new file or overwriting existing content
  std::ofstream outputFile("example.txt");

  // Checking if the file is successfully opened
  if (outputFile.is_open()) {
    outputFile << "This will overwrite existing content.\n";
    outputFile.close();  // Always close the file when done
  } else {
    std::cerr << "Unable to open the file.\n";
  }

  return 0;
}

このコードスニペットでは、まず outputFile という名前の std::ofstream オブジェクトを作成し、操作したいファイル、この場合は example.txt を指定しました。

ファイルにテキストを追加するには std::fstream と 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;
}

上記のコードでは、fstream オブジェクトの open() メソッドを使用して、ファイルを追記モード (std::ios_base::app) で開きました。また、file.is_open() を使用して、ファイルが正常に開かれたかどうかを確認しました。

次に、write() メソッドを使用して、テキストをバイナリデータとしてファイルに書き込みました。見て分かるように、このメソッドは 2 つの引数を取ります:データへのポインタと、書き込むバイト数です。

最後に、操作が完了したことを示すために Done! を出力しました。

結論

この記事で紹介した各方法は、ファイルにテキストを追加するための独自のアプローチを提供します。どの方法を選ぶかは、具体的な要件やコーディングスタイルによって異なります。