从Windows上的tmpfile()获取文件名

时间:2016-06-04 07:57:15

标签: c++ temporary-files

如何通过调用tmpfile()而不使用tmpnam()来获取Windows上的文件名?

std::FILE* tmpf = std::tmpfile();   // Opens a temp file

自己动手

const char *name = tmpnam(NULL);  // Get temp name
FILE *fp = fopen(name, "w");      // Create the file
// ...
fclose(fp);
remove(name);

2 个答案:

答案 0 :(得分:1)

一种方法是从FILE转换为HANDLE

std::FILE* tmpf = std::tmpfile();
HANDLE handle = (HANDLE)_get_osfhandle(_fileno(tmpf));

然后使用GetFinalPathNameByHandleW获取文件名(需要Vista或更高版本)

char buf[MAX_PATH];
GetFinalPathNameByHandleA(handle, buf, MAX_PATH, VOLUME_NAME_DOS);

答案 1 :(得分:1)

另一种方法是自己生成文件名 - 请参见此处:

https://stackoverflow.com/a/37736406/2338477

但请注意,tmpfile需要管理员权限才能在某些窗口上运行 - 因此,只有当您的应用程序以管理员权限运行时,才能使用GetFinalPathNameByHandleW。