【问题标题】:Get filename from tmpfile() on Windows在 Windows 上从 tmpfile() 获取文件名
【发布时间】:2016-06-04 07:57:15
【问题描述】:

如何在不使用 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);

【问题讨论】:

  • 乍一看,如果您需要文件名,它不是临时文件。

标签: c++ temporary-files


【解决方案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);

【讨论】:

  • 我希望在标准 C++ 中有一种可移植的方式。
【解决方案2】:

另一种方法是自己生成该文件名 - 请参阅此处的帖子:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 2023-03-13
    相关资源
    最近更新 更多