テキストファイル書き込み用クラス

これまでC# で作成してきた「SourceToHTML」を、C++Builder に焼きなおしてみます。

TextWriter.h


//***************************************************************************
// テキストファイル 書き込み用クラス
//***************************************************************************
#ifndef TextWriterH
#define TextWriterH
//---------------------------------------------------------------------------
#include <Classes.hpp>
//---------------------------------------------------------------------------
class TTextWriter
{
private:
const wchar_t C_NEWLINE; // '\n'

TStringList* textWriter;
AnsiString fileName;
WideString writeBuffer;

bool IsOpen;

// 書き込み用バッファの内容を書き込み、バッファをクリアする
void __fastcall putLine();
public:
// 初期化
__fastcall TTextWriter(AnsiString fileName);
// 終了
__fastcall ~TTextWriter();
// ファイルのCLOSE
void __fastcall Close();
// 出力ファイルに文字列を書く
void __fastcall putString(WideString s);
// 出力ファイルに1文字ずつ書く
void __fastcall putChar(wchar_t c);
};
#endif

TextWriter.cpp


//*******************************************************************************************************
// テキストファイル 書き込み用クラス
//*******************************************************************************************************
#pragma hdrstop
#include "TextWriter.h"
//-------------------------------------------------------------------------------------------------------
#pragma package(smart_init)
//-------------------------------------------------------------------------------------------------------
// 初期化
//-------------------------------------------------------------------------------------------------------
__fastcall TTextWriter::TTextWriter(AnsiString fileName):C_NEWLINE(L'\n')
{
IsOpen = false;
writeBuffer = "";

this->fileName = fileName;
}
//-------------------------------------------------------------------------------------------------------
// 終了
//-------------------------------------------------------------------------------------------------------
__fastcall TTextWriter::~TTextWriter()
{
Close();
}
//-------------------------------------------------------------------------------------------------------
// ファイルのCLOSE
//-------------------------------------------------------------------------------------------------------
void __fastcall TTextWriter::Close()
{
//OPENしてたら
if (IsOpen)
{
//書き込み用バッファに何か残っていたら
if ((writeBuffer != NULL) && (wcslen(writeBuffer) > 0))
{
//書き込み用バッファの内容を書き込み、バッファをクリアする
putLine();
}

//CLOSEする
textWriter->SaveToFile(fileName);
delete textWriter;
IsOpen = false;
}
}
//-------------------------------------------------------------------------------------------------------
// 出力ファイルに文字列を書く
//-------------------------------------------------------------------------------------------------------
void __fastcall TTextWriter::putString(WideString s)
{
for (int i=1;i<=s.Length();i++)
{
putChar(s[i]);
}
}
//-------------------------------------------------------------------------------------------------------
// 出力ファイルに1文字ずつ書く
//-------------------------------------------------------------------------------------------------------
void __fastcall TTextWriter::putChar(wchar_t c)
{
//まだOPENしてなかったら
if (!IsOpen)
{
//OPENする
textWriter = new TStringList();
IsOpen = true;
}

//改行コードが渡されたら
if (c == C_NEWLINE)
{
//書き込み用バッファの内容を書き込み、バッファをクリアする
putLine();
}
else
{
//書き込み用バッファに1文字追加する
writeBuffer += WideString(c);
}
}
//-------------------------------------------------------------------------------------------------------
// 書き込み用バッファの内容を書き込み、バッファをクリアする
//-------------------------------------------------------------------------------------------------------
void __fastcall TTextWriter::putLine()
{
textWriter->Append(writeBuffer);
writeBuffer = "";
}