unicodeでのCString

2012年8月30日

Visual Studio 2005をよく使うので、新しいのは分からないけど
unicodeプロジェクトでの話

Windowsでは作成するファイルがSJISが多いですし
実際使われているファイルもSJISが圧倒的に多い。

テキストファイルを読み込み、読み込んだテキストファイル1行をCStringに入れて
操作とかよくやりますが

CStdioFile stdFile;
if (!stdFile.Open( csFileName, CFile::modeRead | CFile::shareDenyWrite ))
{
//エラー処理
}
CString csLine;

while (stdFile.ReadString(csLine)!=NULL)
{
//読み込んだ行のなんらかの処理

size_t size = csLine.GetLength() * sizeof(TCHAR);
↑こう書いても1行のバイト数は取得出来ない
}

アスキー文字と日本語とか混在している場合は正しくバイト数は取得できない。
最初からマルチバイト文字で作成すればいいとか、いろいろな手はあるけど、

USES_CONVERSION;
CStringA asLine + W2A(csLine);
size_t size = asLine1.GetLength();

CStringAに入れちゃえばOK!

急いでコーディングするとデバッグするまで気がつかなかったりする
GetLengthですが、みんなひっかからないかな?

Windows,未分類

Posted by みつ