简体   繁体   English

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

[英]Get filename from tmpfile() on Windows

How do I get the filename on Windows from by call to tmpfile() without using tmpnam() instead? 如何在Windows上通过调用tmpfile()而不使用tmpnam()来获取文件名?

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

Do it myself 自己做

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

One way is to convert from FILE to HANDLE 一种方法是从FILE转换为HANDLE

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

Then use GetFinalPathNameByHandleW to obtain the file name (requires Vista or higher) 然后使用GetFinalPathNameByHandleW获取文件名(需要Vista或更高版本)

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

Another way is to generate that filename by yourself - see post here: 另一种方法是自行生成该文件名-请参见此处的帖子:

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

But please note also that tmpfile requires administrator privileges to work on some of windows - so using GetFinalPathNameByHandleW is acceptable only if your application is running with administrator priviledges. 但也请注意,tmpfile需要管理员特权才能在某些Windows上工作-因此,仅当您的应用程序以管理员权限运行时,才可以使用GetFinalPathNameByHandleW。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM