CAtlFileでユニコード形式のテキストファイルを読み込む

test116.gif
ここではATLに備わるファイル操作用のクラス「CAtlFile」を利用してユニコード形式のテキストファイルを読み込み、メッセージボックスに表示した。

ユニコード文字列を読み込む際に注意すべき点はファイルサイズ=文字長という関係が成り立たないという点だ。

依存環境:ATL
#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;
}

プロジェクトファイルをダウンロード


カテゴリー「ファイル・フォルダ」 のエントリー