[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") ); //日本語の場合

参考にしたところ