SHGetFolderPath возвращает путь с вопросительными знаками в нем - PullRequest
0 голосов
/ 28 декабря 2010

Наше приложение вызывает ShGetFolderPath при запуске, чтобы получить папку «Мои документы».Это нормально работает отлично.Однако для трех пользователей - Дмитрия, Йорга и Йоргена (посмотрите, сможете ли вы найти шаблон!) - вызов возвращает некоторые очень странные результаты.Например, для Дмитрия вызов возвращается:

c:\Users\???????\Documents

Я предполагаю, что здесь происходит какая-то кодировка символов shenanigan, возможно связанная с Unicode, но я не имею никакого опыта в подобных вещах,Как я могу получить полезный путь к папке (и другим связанным папкам) из окон, не копаясь в ключах реестра для получения информации?

В письме мне Дмитрий ("Дмитрий") сказал мнеего папка «Мои документы» фактически находилась здесь:

C:\Users\43D6~1\Documents

Так что я знаю, что есть способ получить «нормальную» версию пути из Windows, я просто не знаю, что это.

Справочная информация. Наше приложение не поддерживает Unicode и использует стандартные строки "char *".Как мы можем получить «нормальный» путь?Я не против того, чтобы вызывать «юникодную» версию функции, а затем конвертировать ее в «обычный» текст, если это возможно.Конвертировать приложение полностью для использования Юникода здесь не вариант (у нас нет времени).

Спасибо.

Ответы [ 2 ]

5 голосов
/ 29 декабря 2010

Идите и получите путь к файлу в Юникоде. Затем вызовите GetShortPathNameW для преобразования в компоненты с коротким путем. Вывод не должен содержать никаких символов вне диапазона ASCII, даже если это функция Unicode. Затем вы можете обрезать каждый символ Unicode до 8 бит, чтобы создать строку char.

2 голосов
/ 28 декабря 2010

Я не против того, чтобы вызывать "юникодную" версию функции, а затем преобразовывать ее в "обычный" текст, если это возможно.

Если вы измените свой вызов на SHGetFolderPath на SHGetFolderPathW, он предоставит вам строку типа LPWSTR, которая является строкой Unicode. Оттуда вы можете использовать эту строку с различными функциями Юникода, оканчивающимися на W, для доступа к нужной папке или файлам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...