Открытие fstream с помощью файла с именем Unicode в Windows с использованием компилятора, не являющегося MSVC
Мне нужно открыть файл как std::fstream (или фактически любой другой std::ostream), когда имя файла является именем файла "Unicode".
Под MSVC у меня нестандартное расширение std::fstream::open(wchar_t const *,...)
? Что я могу сделать с другими компиляторами, такими как GCC (наиболее важный) и, возможно, компилятор Borland.
Я знаю, что CRTL обеспечивает _wfopen
но это дает C FILE *
интерфейс вместо io-streams, может быть есть нестандартный способ создания io-stream из FILE *
? Есть ли boost::ifstream
с MSVC как расширение для Windows?
3 ответа
В настоящее время нет простого решения.
Вам нужно создать свой собственный буфер потока, который использует _wfopen
под капотом. Вы можете использовать для этого, например, boost::iostream
К сожалению, стандартного способа сделать это не существует, хотя C++0x (1x?) Обещает это сделать. До этого вы правильно предполагали, что решение можно найти в Boost, однако библиотека, которую вы ищете, - Boost.Filesystem.
Boost.Filesystem внутренне использует широкие строки по умолчанию для своей системы универсального пути, поэтому в этом отношении нет проблем с юникодом.
Преобразовать имя файла Unicode в char*
строка, использующая что-то вроде wcstombs()
или же WideCharToMultiByte()
(что дает вам гораздо больший контроль над кодовыми страницами).
Затем используйте преобразованное имя файла, чтобы открыть файл.