从 Windows 上的 tmpfile() 获取文件名
Get filename from tmpfile() on Windows
如何在不使用 tmpnam() 的情况下通过调用 tmpfile() 获取 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);
一种方法是从 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);
另一种方法是自己生成该文件名 - 请参阅此处 post:
但另请注意,tmpfile 需要管理员权限才能处理某些 windows - 因此仅当您的应用程序是 运行 管理员权限时才可以使用 GetFinalPathNameByHandleW。
如何在不使用 tmpnam() 的情况下通过调用 tmpfile() 获取 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);
一种方法是从 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);
另一种方法是自己生成该文件名 - 请参阅此处 post:
但另请注意,tmpfile 需要管理员权限才能处理某些 windows - 因此仅当您的应用程序是 运行 管理员权限时才可以使用 GetFinalPathNameByHandleW。