Открытие fstream с файлом с именем Unicode под Windows с использованием компилятора, отличного от MSVC

Мне нужно открыть файл как std:: fstream (или фактически любой другой std:: ostream), когда имя файла - это имя файла Unicode.

В MSVC у меня есть нестандартное расширение std::fstream::open(wchar_t const *,...)? Что я могу сделать с другими компиляторами, такими как GCC (наиболее важный) и, возможно, компилятор Borland.

Я знаю, что CRTL предоставляет _wfopen, но вместо io-потоков он дает интерфейс C FILE *, возможно, существует нестандартный способ создания io-потока из FILE *? Есть ли boost::ifstream с расширением MSVC для Windows?

Ответ 1

В настоящее время нет простого решения.

Вам нужно создать свой собственный буфер потока, который использует _wfopen под капотом. Вы можете использовать для этого, например, boost::iostream

Ответ 2

К сожалению, нет стандартного способа сделать это, хотя С++ 0x (1x?) promises для этого. До тех пор вы правильно предполагали, что решение можно найти в Boost, однако библиотека, которую вы ищете, Boost.Filesystem.

Boost.Filesystem по умолчанию использует широкие строки по своей универсальной системе путей, поэтому в этом отношении нет проблем с Юникодом.

Ответ 3

Преобразуйте имя файла Unicode в строку char*, используя что-то вроде wcstombs() или WideCharToMultiByte() (что дает вам больший контроль над вовлеченными кодовыми страницами).

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