Мне нужно прочитать текущий каталог в Windows 7, который находится в другой локали, чем тот, который используется в настоящее время. Поэтому я подумал об использовании GetCurrentDirectoryW (), так как он совместим с юникодом, с wchar_t *. Однако мне нужно использовать существующий API, поэтому мне нужно преобразовать его в char *. Для этого я использовал функцию wcstombs (). Тем не менее, преобразование не происходит должным образом. Ниже приведен код, который я использовал:
wchar_t w_currentDir[MAX_PATH + 100];
char currentDir[MAX_PATH + 100];
GetCurrentDirectoryW(MAX_PATH, w_currentDir);
wcstombs (currentDir, w_currentDir, MAX_PATH + 100);
printf("%s \n", currentDir);
Текущий каталог, в котором я нахожусь, это C: \ 特斯塔 敌人. Когда преобразование выполнено, только часть «C: \» полного пути преобразуется в char * должным образом. Других символов нет, они являются ненужными значениями. В чем проблема в этом подходе, который я использую? Как я могу исправить это?
Спасибо!
Проблема в том, что нет подходящего преобразования возможно. Широкий символ может не иметь регулярного эквивалента символа (вот почему wchar
существует в первую очередь. Так что вы должны использовать wprintf
:
GetCurrentDirectoryW(MAX_PATH, w_currentDir);
wprintf("%s \n", w_currentDir);
Других решений пока нет …