
ここではATLに備わるファイル操作用のクラス「CAtlFile」を利用してユニコード形式のテキストファイルを読み込み、メッセージボックスに表示した。
ユニコード文字列を読み込む際に注意すべき点はファイルサイズ=文字長という関係が成り立たないという点だ。
#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))
{
//ユニコードモードで読み込みたいのでWCHARでバッファーを確保
WCHAR* pszBuff;
//ファイルサイズ=WCHARの数というわけではなないので、BYTEでメモリを確保してキャスト
pszBuff = (WCHAR*)new BYTE[(size_t)nLen + sizeof(WCHAR)];
if(pszBuff)
{
//ファイルにはNULL文字がないので付加しておく
((BYTE*)pszBuff)[nLen+0] = NULL;
((BYTE*)pszBuff)[nLen+1] = NULL;
//ファイルを読み込む
hr = cFile.Read(pszBuff,(DWORD)nLen);
//読み込んだ内容をメッセージボックスで表示
if(SUCCEEDED(hr))
{
//このメッセージボックス関数は基本的にWindows 9xでは使えないので注意!
::MessageBoxW(NULL,pszBuff,L"",MB_OK);
ret = true;
}
delete pszBuff;
}
}
//ファイルを閉じる
cFile.Close();
return ret;
}
