
ここではATLに備わるファイル操作用のクラス「CAtlFile」を利用してテキストファイルを読み込み、メッセージボックスに表示した。
テキストファイルを読み込むときに一番注意するべき点は「文字コード」。Windows 9x時代にはほとんどのテキストファイルが通常のシフトJIS(SHIFT-JIS)で書かれていたためあまり注意する必要はなかった。
しかしインターネットやWindows XP/Vistaが普及するに連れてテキストファイルがシフトJISではなく、(まだまだ少ないものの)ユニコードやUTF-8で書かれるケースが増えてきた。また最近ではVisual Studioでアプリケーションをビルドするときに「ユニコードビルド」することも多い。
特にユニコードビルドをしている場合には意図せずにシフトJISのテキストファイルをユニコード形式で扱ってしまい、読み込んだファイルが文字化けしてしまうトラブルも起こりえるので注意が必要だ。
#include <atlfile.h>
bool Test()
{
bool ret;
HRESULT hr;
ULONGLONG nLen;
CAtlFile cFile;
//ファイルを読み込みモードで開く
hr = cFile.Create(_T("テスト.txt"),GENERIC_READ,FILE_SHARE_READ,OPEN_EXISTING);
if(FAILED(hr))
return false; //ファイルを開くのに失敗
//ファイルサイズを取得
hr = cFile.GetSize(nLen);
ret = false;
if(SUCCEEDED(hr))
{
//SHIFT-JISモードで読み込みたいのでcharでバッファーを確保
char* pszBuff;
pszBuff = new char[(size_t)nLen + 1];
if(pszBuff)
{
//ファイルにはNULL文字がないので付加しておく
pszBuff[nLen] = NULL;
//ファイルを読み込む
hr = cFile.Read(pszBuff,(DWORD)nLen);
//読み込んだ内容をメッセージボックスで表示
if(SUCCEEDED(hr))
{
ret = true;
::MessageBoxA(NULL,pszBuff,"",MB_OK);
}
delete pszBuff;
}
}
//ファイルを閉じる
cFile.Close();
return ret;
}
