GetTempFileName似乎在Windows 10上被破坏

时间:2015-10-15 23:16:58

标签: c++ winapi windows-7 windows-10

我有一个使用GetTempFileName的MFC程序。在Windows 7上它可以正常工作,但是当我将相同的代码用于Windows 10时,它会产生垃圾。

TCHAR temp_dir[1024];
GetTempPath(1024,temp_dir);
TCHAR temp_file[1024];
GetTempFileName("C:\\","udb",0,temp_file);
std::cout << "Temp DB Path: " << temp_file << std::endl;

在Windows7上:

Temp DB Path: C:\udb2145.tmp

在Windows10上:

Temp DB Path: o▒

我在代码中做错了什么?或者我应该使用不同的功能吗?

1 个答案:

答案 0 :(得分:6)

好吧,首先,当我测试你的例子时,GetTempFileName返回0,这意味着它遇到了一个错误(成功的返回值是非零的临时文件标识符)。 GetLastError返回-5,这意味着:&#34;访问被拒绝&#34;,我高度怀疑非管理应用程序可以写入&#34; C:\&#34; (至少在Windows 8 +下)。

您正在查看的正在打印的垃圾值是因为您没有初始化temp_file数组。你应该这样做:

TCHAR temp_file[1024] = {0};

并且,为了使您的代码有效,请将临时文件存储在实际的临时文件夹中:

GetTempFileName(temp_dir,"udb",0,temp_file);

编辑:而且,正如其中一位评论者已经指出的那样,如果您的代码使用unicode,则需要wcout才能正确输出文件名。否则,您将只看到文件路径的第一个字符。但这会影响输出到控制台。