ストリームが動作を停止する理由は、フェイル ビットが設定されるためです。エラーを処理していないため、ストリームが機能しなくなります。エラーが発生した場合、フェイル ビットをクリアする必要があります。
codecvt ファセットが日本語のワイド文字をバイトに変換する処理を行うように、wostream オブジェクトのロケールを設定する必要があります。デフォルトでは、VS で ASCII 文字のみをサポートする "C" ロケールが使用されます。日本語版の Windows で動作するようにファイルを作成するだけでよい場合は、次のようにします。
std::wofstream outfile(filename, ios::out);
outfile.imbue(std::locale("")); // use the system locale
CString varName = _T(" ");
/*stuff*/
outfile << L" Name: " << (LPCTSTR)varName << L"\n";
または、Windows で日本語ロケールを指定することもできます。
outfile.imbue(std::locale("Japanese")); // use the japanese locale on any Windows system
これらの方法はどちらも従来の日本語ロケール エンコーディングを使用しますが、これはおそらく避けるべきです。代わりに UTF-8 を使用できます。
// replace just the codecvt facet of the stream's current locale
outfile.imbue(std::locale(outfile.getloc(), new std::codecvt_utf8_utf16<wchar_t>()));