2014-09-16 3 views
0

У нас есть проект поддержки, который был построен на компиляторах VC6. В какой-то части кода у нас есть функция открытия файла с использованием метода ifstream.open(), который терпит неудачу, когда имя файла содержит символы UNICODE, такие как китайские символы. Поскольку компилятор VC6 не поддерживает версию открытой функции wchar_t *, есть ли способ открыть этот тип файла? Я попробовал метод FILE * _wfopen, но он тоже не работает.открытие имени файла, содержащего символы Unicode в компиляторе VC6

Заранее спасибо

В соответствии с руководством RemyLebeau в - я попытался с помощью ERRNO, я получил значение, как 22, который указывает на неверный параметр. Plese см. Мой код std :: wstring filename = _wgetenv (L "IVT_FILENAME"); FILE * stream; stream = _wfopen (filename.c_str(), L "r");

Это прекрасно работает в vc9, и файл открывается, и я умею читать содержимое. Не знаю, почему он не работает в vc6. Значение потока равно NULL

+0

Объявите ограничение и перейдите к нему. –

+0

Visual Studio 6.0 поддерживается '_wfopen': http://msdn.microsoft.com/en-us/library/aa246392(v=vs.60).aspx –

+0

Он поддерживает _wfopen, но он не может открыть имя файла, содержащего символы юникода и возвращает null для объекта FILE *. GetLastError возвращает код 123- имя файла не найден. Когда тот же код i скопирует пасту в visual studio 8.0, он проходит без каких-либо проблем. – user3462791

ответ

0

Актуальной проблемой была функция _wgetenv. Он не работает должным образом в компиляторе VC6. Замена его с помощью GetEnvironmentVariable разрешает проблему и файл открывается

+0

Как мог отладчик не показывать вам это? Я сомневаюсь, что вы нашли настоящую проблему, необходимость поддерживать как getenv(), так и _wgetenv() - сложная проблема. Использование GetEnvironmentVariable является обходным решением для поврежденной 8-битной копии среды. –

Смежные вопросы