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