Открытие fstream с помощью файла с именем Unicode в Windows с использованием компилятора, не являющегося MSVC - PullRequest
10 голосов
/ 23 февраля 2010

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

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

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

Ответы [ 3 ]

7 голосов
/ 23 февраля 2010

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

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

3 голосов
/ 19 июня 2011

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

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

0 голосов
/ 23 февраля 2010

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

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

...