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

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

Writer.h


#pragma once

namespace SourceToHtml
{
using namespace System;
//*******************************************************************************************************
// テキストファイル 書き込み用クラス
//*******************************************************************************************************
public __gc class Writer
{
private:
const Char NEWLINE; //'\n'

System::IO::StreamWriter* textWriter;
bool IsOpen;
String* fileName;
String* writeBuffer;

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

Writer.cpp


#include "StdAfx.h"
#include ".\writer.h"

namespace SourceToHtml
{
//*******************************************************************************************************
// テキストファイル 書き込み用クラス
//*******************************************************************************************************
//-------------------------------------------------------------------------------------------------------
// 初期化
//-------------------------------------------------------------------------------------------------------
Writer::Writer(String* fileName):NEWLINE('\n')
{
IsOpen = false;
writeBuffer = S"";

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

//CLOSEする
textWriter->Close();
textWriter = NULL;
IsOpen = false;
}
}
//-------------------------------------------------------------------------------------------------------
// 出力ファイルに文字列を書く
//-------------------------------------------------------------------------------------------------------
void Writer::putString(String* s)
{
for (int i=0;i<s->Length;i++)
{
putChar(s->Chars[i]);
}
}
//-------------------------------------------------------------------------------------------------------
// 出力ファイルに1文字ずつ書く
//-------------------------------------------------------------------------------------------------------
void Writer::putChar(Char c)
{
//まだOPENしてなかったら
if (!IsOpen)
{
//OPENする
textWriter = new System::IO::StreamWriter(fileName, false, System::Text::Encoding::GetEncoding("Shift_JIS"));
IsOpen = true;
}

//改行コードが渡されたら
if (c == NEWLINE)
{
//書き込み用バッファの内容を書き込み、バッファをクリアする
putLine();
}
else
{
//書き込み用バッファに1文字追加する
writeBuffer = String::Concat(writeBuffer, Char::ToString(c));
}
}
//-------------------------------------------------------------------------------------------------------
// 書き込み用バッファの内容を書き込み、バッファをクリアする
//-------------------------------------------------------------------------------------------------------
void Writer::putLine()
{
textWriter->WriteLine(writeBuffer);
writeBuffer = S"";
}
}