
Alexei Alexandrov, le 25 janvier 2008 07:11:
namespace fs = boost::filesystem; int main() { // Setting the global locale to be environment locale std::locale::global(std::locale(""));
// Setting the wpath locale to be global fs::wpath_traits::imbue(std::locale());
fs::wpath mypath(L"/tmp/some/directory"); fs::create_directories(mypath); }
To me, this work looks correct and should work. But it terminates with the following message:
terminate called after throwing an instance of 'boost::filesystem::basic_filesystem_error< boost::filesystem::basic_path<std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, boost::filesystem::wpath_traits> >' what(): boost::filesystem::wpath::to_external conversion error Aborted
At the same time, the following code works:
[snip: Same program as above, using fs::detail::utf8_codecvt_facet instead of the system's locale]
which uses a UTF-8 facet from boost itself.
The first example should work too - this is my understanding. Who is wrong here - me or boost?
... or your platform's implementation of codecvt? This is a wild guess as I don't know anything about your platform (in particular: which implementation of the standard library, and the locale environment variables used when running your program) Éric Malenfant --------------------------------------------- Quidquid latine dictum sit, altum viditur.