我需要访问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...
这导致我的代码失败。关于我可能做错了什么提示?
答案 0 :(得分:4)
something~1.ext
是简称。生成短名称是为了与DOS / 16位应用程序兼容。短名称生成可以使用fsutil
在全局或每个卷中关闭。应用程序不必关心路径是短还是长,因为用户可以在您的应用程序中将其用作输入。
Why does the system convert TEMP to a short file name?
在系统控制面板上设置环境变量时, TEMP和TMP变量被静默转换为短文件名 等价物(如果可能)。为什么会这样?
当然是出于兼容性考虑。
批处理文件通常假设引用的路径 至%TEMP%和%TMP%环境变量不包含任何 嵌入式空间。 (其他程序也可能会做出此假设,但是 批处理文件是您最常遇到的地方 问题。)
我说“如果可能”是因为您可以在 在这种情况下,没有短名称等效,并且路径保留在 其原始的长格式。
您应该使用PathCchAppend
之类的函数来连接路径元素,因为它可以为您处理反斜杠。