C++で1つのテキストファイルの内容を別のファイルに追記する方法
C++では、<fstream>ヘッダーが提供するファイルストリームクラスを使うことで、手軽にファイル操作を実現できます。この記事では、1つのテキストファイル(a.txt)の内容を、別のテキストファイル(a1.txt)の末尾に追記するプログラムを紹介します。
入力
a.txt の内容:「Tutorials」 a1.txt の内容:「point」
出力
Tutorialspoint
アルゴリズム
- fstreamクラスのオブジェクト f、および ifstream型の fin を定義します。
- fin を使って入力ファイル「a.txt」を開きます。
- ofstream型の fout を定義し、出力ファイル「a1.txt」を追記モード(ios::app)で開きます。
- 入力ファイルが開けない場合は「File not found」と表示します。
- 正常に開けた場合は、fin の内容を rdbuf() 経由で fout に書き込みます。
- 最後に、追記後の「a1.txt」を読み取りモードで開き、単語ごとに内容を出力して確認します。
サンプルコード
#include <bits/stdc++.h>
#include <fstream>
using namespace std;
int main() {
fstream f;
ifstream fin;
fin.open("a.txt");
ofstream fout;
fout.open("a1.txt", ios::app);
if (!fin.is_open()) {
cout << "File not found";
} else {
fout << fin.rdbuf();
}
string word;
f.open("a1.txt");
while (f >> word) {
cout << word << " ";
}
return 0;
}
実行結果
Tutorialspoint
ポイント解説
- ios::app(追記モード):既存のファイル内容を消さずに、必ずファイルの末尾から書き込みを行います。通常の open ではファイルが上書きされてしまうため、追記処理にはこの指定が不可欠です。
- rdbuf():ストリームの内部バッファに直接アクセスする関数です。「fout << fin.rdbuf();」と書くだけで、入力ファイル全体を高速かつ簡潔に出力ファイルへコピーできます。
- is_open():ファイルが正しく開けたかどうかを判定します。存在しないファイルへのアクセスによるエラーを防ぐため、必ずチェックする習慣をつけましょう。
このように、ifstream・ofstream・fstreamを組み合わせれば、ファイルの結合や追記といった処理も数行のコードで実装できます。ログファイルへの追記など実務でも頻繁に使われるテクニックなので、ぜひマスターしておきましょう。
-
【Java】ファイルから特定のテキスト(文字列)を削除する方法
Javaでファイルから特定のテキストを削除したい場合、「別の一時ファイルへ必要な行だけを書き出し、最後に元のファイル名に置き換える」という手法が定番です。以下のコード例を見てみましょう。 コード例 File input_file = new File(path to the .txt file); File temp_file = new File(path to the .txt file); BufferedReader my_reader = new BufferedReader(new FileReader(input_file)); BufferedWriter my_writer
-
【解決】「ファイルが別のプログラムで開かれています」エラーの直し方
「ファイルが別のプログラムで開かれています」エラーとはファイルに対して操作を実行しようとした際に、そのファイルが別のプログラムによってアクセスされていると、「ファイルが別のプログラムで開かれています」というエラーが表示され、タスクや操作を実行できなくなります。これはコンピューティングにおいて古くから存在する基本的な仕組みで、主にデータの不整合を防ぐために設けられています。しかし、実際にはどのアプリケーションもそのファイルを使用していないのにエラーが発生する場合、厄介な問題となります。ファイルがバックグラウンドの隠れたサービスによって使用されている可能性や、バグが原因で操作が妨げられている可能性