[MFC] UnicodeプロジェクトでのWriteString
ファイルの末尾に受け取ったCString文字列を書き込むという関数作成時のメモ。まー、ログを簡単に出力する為の関数です。
bool underwrite( CString& str ){ CStdioFile file; CString filePath = _T(".\\foo.bar"); // ファイルを書込専用、ほかのプロセスからは書込不可、 // ファイルがなければ作成し、あればそのファイルを読み込む if( file.Open( filePath, CFile::modeWrite | CFile::shareDenyWrite | CFile::modeCreate | CFile::modeNoTruncate ) ){ // ファイルオープン成功 // ポインタをファイルの末尾に移動 file.SeekToEnd(); // 文字列書込 file.WriteString( str ); // ファイルを閉じる file.Close(); }else{ return false; } return true; }
上記のようなプログラムを組んだのだが、どういうわけか上手く日本語が書き込めない。
「0123あいうabc」のような文字列を与えた場合、ファイルに出力されるのは「0123」となってしまう。
原因はWriteStringがロケール依存関数だった為。WriteStringが呼ばれる前に以下を呼んでやる必要がある。
// #include "locale.h" _tsetlocale( LC_ALL, _T("") ); //システム既定のロケールに設定 _tsetlocale( LC_ALL, _T("japanese") ); //日本語の場合