2023年06月24日(土) [長年日記]
■ [c++][windows] VC++でstd::filesystem::filesystem_errorのエラーメッセージを英語にする
次のコードをVC++でコンパイルして実行すると、エラーメッセージが日本語で出力される。
#include <filesystem> #include <iostream> int main() { try { std::filesystem::copy_file("あ.txt", "ああ.txt"); } catch (const std::filesystem::filesystem_error& e) { std::cout << e.what() << std::endl; } }
copy_file: 指定されたファイルが見つかりません。: "あ.txt", "ああ.txt"
これを英語で出力されるようにするにはどうしたらいいのか?(OSの言語設定は日本語のままで)
std::setlocale(LC_ALL, "C");
を追加したらいいかなと思ったけど、こうしてもメッセージは日本語のままだった。
- HRESULT型からのエラーメッセージ取得 (yohhoyの日記)
に
おまけ:FormatMessage関数のdwLanguageId引数=0で実装されているため、SetThreadUILanguage関数でスレッドのLANGIDを事前に変更しておく案もある。シングルスレッドプログラムならこれでもいいか...
とあるのを発見し、これを試すと英語メッセージに変わった。こうするしかない?
#include <filesystem> #include <iostream> #include <windows.h> int main() { SetThreadUILanguage(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); try { std::filesystem::copy_file("あ.txt", "ああ.txt"); } catch (const std::filesystem::filesystem_error& e) { std::cout << e.what() << std::endl; } }
copy_file: The system cannot find the file specified.: "あ.txt", "ああ.txt"