Открытие 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() (что дает вам гораздо больший контроль над кодовыми страницами).

Затем используйте преобразованное имя файла, чтобы открыть файл.

Другие вопросы по тегам