テキストファイルに追記する方法

既存のテキストファイルに対して、文字列を追記する方法を紹介します。

サンプルコードでは、文字コードUTF8で追記しています。

■TStringList

TStringListでテキストファイルの内容を読み込み、読み込んだ内容に文字列を追加してファイルに書き出します。
テキストファイルのデータが大きいと処理に時間とメモリを消費します。

unique_ptr<TStringList> sl(new TStringList());
sl->LoadFromFile(L"C:\\test.txt");
sl->Add(L"テスト1");
sl->SaveToFile(L"C:\\test.txt", TEncoding::UTF8);
//=>テスト1\r\n

■TFileStream

TFileStreamでテキストファイルを開き、末尾に移動して、文字列を追加して保存します。
文字列を一度バイト列に変換して、ストリームに追加します。

unique_ptr<TFileStream> fs(new TFileStream(L"C:\\test.txt", fmOpenReadWrite));
fs->Seek(0, soFromEnd);
UTF8String utf8 = L"テスト2";
fs->Write(utf8.c_str(), utf8.Length());
//=>テスト2

■TStreamWriter

TStreamWriterでテキストファイルを開き、追記します。
TStreamWriterが出力する文字コードの初期値はUTF8なので、文字コードの指定は省略できます。

unique_ptr<TStreamWriter> sw(new TStreamWriter(L"C:\\test.txt", true, TEncoding::UTF8, 1024));
//unique_ptr<TStreamWriter> sw(new TStreamWriter(L"C:\\test.txt", true));
sw->Write(UnicodeString(L"テスト3"));
//=>テスト3
sw->WriteLine(UnicodeString(L"テスト4")); //改行付き
//=>テスト4\r\n
sw->Close();

TStreamWriterはコンストラクタの引数にTStream*を受け取ることもできます。

unique_ptr<TFileStream> fs(new TFileStream(L"C:\\test.txt", fmOpenReadWrite));
unique_ptr<TStreamWriter> sw(new TStreamWriter(fs.get()));
sw->Write(UnicodeString(L"テスト5"));
sw->WriteLine(UnicodeString(L"テスト6"));
sw->Close();

■IOUtils.TFile.AppendAllText

IOUtils.TFile.AppendAllTextは、ファイルに文字列を追加する関数です。
引数に、ファイルのパス・追加する文字列・エンコードを指定します。

#include <IOUtils.hpp>

TFile::AppendAllText(L"C:\\test.txt", L"テスト7", TEncoding::UTF8);
TFile::AppendAllText(L"C:\\test.txt", L"テスト8", TEncoding::UTF8);
//=> テスト7テスト8

やはり最近導入されたクラスTStreamWriterやIOUtilsユニットが使いやすいです。

更新履歴

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください