CAtlFileでテキストファイルを読み込む

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

テキストファイルを読み込むときに一番注意するべき点は「文字コード」。Windows 9x時代にはほとんどのテキストファイルが通常のシフトJIS(SHIFT-JIS)で書かれていたためあまり注意する必要はなかった。

しかしインターネットやWindows XP/Vistaが普及するに連れてテキストファイルがシフトJISではなく、(まだまだ少ないものの)ユニコードやUTF-8で書かれるケースが増えてきた。また最近ではVisual Studioでアプリケーションをビルドするときに「ユニコードビルド」することも多い。

特にユニコードビルドをしている場合には意図せずにシフトJISのテキストファイルをユニコード形式で扱ってしまい、読み込んだファイルが文字化けしてしまうトラブルも起こりえるので注意が必要だ。


依存環境: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))
	{
		//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;
}

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


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