GetTempPathA返回不正确的用户文件夹

时间:2018-07-02 05:42:00

标签: c windows winapi

我需要访问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 :(得分:4)

something~1.ext是简称。生成短名称是为了与DOS / 16位应用程序兼容。短名称生成可以使用fsutil在全局或每个卷中关闭。应用程序不必关心路径是短还是长,因为用户可以在您的应用程序中将其用作输入。

  

Why does the system convert TEMP to a short file name?

     

在系统控制面板上设置环境变量时,   TEMP和TMP变量被静默转换为短文件名   等价物(如果可能)。为什么会这样?

     

当然是出于兼容性考虑。

     

批处理文件通常假设引用的路径   至%TEMP%和%TMP%环境变量不包含任何   嵌入式空间。 (其他程序也可能会做出此假设,但是   批处理文件是您最常遇到的地方   问题。)

     

我说“如果可能”是因为您可以在   在这种情况下,没有短名称等效,并且路径保留在   其原始的长格式。

您应该使用PathCchAppend之类的函数来连接路径元素,因为它可以为您处理反斜杠。