GetTempPathA возвращает неверную папку пользователя - PullRequest
0 голосов
/ 02 июля 2018

Мне нужен доступ к пользовательской временной папке в Windows, которая должна выполняться с помощью

GetTempPathA()

У меня есть что-то вроде:

char buff[512];
GetTempPath(500,buff);
strcat(buff,"specific_folder_in_temp\\file.txt");
FILE f*;
f = fopen(buff,"w");

Однако вместо возврата ожидаемого

C:\Users\user.name\AppData\Local\Temp\...

Я получаю

C:\Users\USER~1.NAM\AppData\Local\Temp...

Это приводит к сбою моего кода. Какие-нибудь подсказки относительно того, что я могу делать неправильно?

1 Ответ

0 голосов
/ 02 июля 2018

something~1.ext - короткое имя. Короткие имена генерируются для совместимости с DOS / 16-битными приложениями. Генерация коротких имен может быть отключена глобально или для каждого тома с помощью fsutil. Приложения не должны заботиться о том, является ли путь коротким или длинным, потому что пользователь может использовать либо как входные данные в вашем приложении.

Почему система преобразует TEMP в короткое имя файла?

Когда вы устанавливаете переменные среды с помощью панели управления системы, Переменные TEMP и TMP автоматически преобразуются в короткое имя файла эквиваленты (если возможно). Почему это?

Для совместимости, конечно.

Для пакетных файлов очень распространено предположение, что указанные пути переменные окружения% TEMP% и% TMP% не содержат встроенные пространства. (Другие программы могут также сделать это предположение, но командные файлы являются наиболее распространенным местом, где вы сталкиваетесь с этим проблема.)

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

Вы должны использовать такую ​​функцию, как PathCchAppend, чтобы объединить элементы пути, потому что она заботится о обратной косой черте для вас.

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