spi*_*ick 0 c++ winapi windows-7 windows-10
我有一个使用的MFC程序 GetTempFileName.在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;
Run Code Online (Sandbox Code Playgroud)
在Windows7上:
Temp DB Path: C:\udb2145.tmp
Run Code Online (Sandbox Code Playgroud)
在Windows10上:
Temp DB Path: o?
Run Code Online (Sandbox Code Playgroud)
我在代码中做错了吗?或者我应该使用不同的功能?
好吧,首先,当我测试你的例子时,GetTempFileName返回0,这意味着它遇到了一个错误(成功的返回值是非零的临时文件标识符).GetLastError返回-5,这意味着:"拒绝访问",我非常怀疑非管理应用程序可以写入"C:\"(至少在Windows 8+下).
您正在查看的正在打印的垃圾值是因为您没有初始化temp_file数组.你应该这样做:
TCHAR temp_file[1024] = {0};
Run Code Online (Sandbox Code Playgroud)
并且,为了使您的代码工作,将临时文件存储在实际的临时文件夹中:
GetTempFileName(temp_dir,"udb",0,temp_file);
Run Code Online (Sandbox Code Playgroud)
编辑:并且,正如其中一位评论者已经指出的那样,如果您的代码使用unicode,则需要wcout才能正确输出文件名.否则,您将只看到文件路径的第一个字符.但这会影响输出到控制台.