getTempFileNameW 函数 (fileapi.h)
创建临时文件的名称。 如果生成唯一的文件名,则会创建一个空文件并释放其句柄;否则仅生成文件名。
语法
UINT GetTempFileNameW(
[in] LPCWSTR lpPathName,
[in] LPCWSTR lpPrefixString,
[in] UINT uUnique,
[out] LPWSTR lpTempFileName
);
参数
[in] lpPathName
文件名的目录路径。 应用程序通常为当前目录或 GetTempPath 函数的结果指定句点 (.) 。 字符串长度不能超过 MAX_PATH-14 个字符,否则 GetTempFileName 将失败。 如果此参数为 NULL,则该函数将失败。
[in] lpPrefixString
以 null 结尾的前缀字符串。 函数最多使用此字符串的前三个字符作为文件名的前缀。 此字符串必须包含 OEM 定义的字符集中的字符。
[in] uUnique
用于创建临时文件名的无符号整数。 有关详细信息,请参阅“备注”。
如果 uUnique 为零,则函数会尝试使用当前系统时间形成唯一的文件名。 如果文件已存在,则数字将增加 1,函数将测试此文件是否已存在。 这会一直持续到找到唯一文件名;函数按该名称创建一个文件并将其关闭。 请注意,当 uUnique 不为零时,函数不会尝试验证文件名的唯一性。
[out] lpTempFileName
指向接收临时文件名的缓冲区的指针。 此缓冲区应 MAX_PATH 字符,以容纳路径和终止 null 字符。
返回值
如果函数成功,则返回值指定临时文件名中使用的唯一数值。 如果 uUnique 参数为非零,则返回值指定相同的数字。
如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
下面是可能的返回值。
返回值 | 说明 |
---|---|
|
lpPathName 参数指向的字符串长度超过 MAX_PATH-14 个字符。 |
备注
GetTempFileName 函数创建以下格式的临时文件名:
<path>\<pre><uuuu>.Tmp
下表描述了文件名语法。
组件 | 含义 |
---|---|
<path> | 由 lpPathName 参数指定的路径 |
<pre> | lpPrefixString 字符串的前三个字母 |
<uuuuu> | uUnique 的十六进制值 |
如果 uUnique 为零, 则 GetTempFileName 将创建一个空文件并将其关闭。 如果 uUnique 不为零,则必须自行创建文件。 仅创建文件名,因为 GetTempFileName 无法保证文件名是唯一的。
仅使用 uUnique 参数的低 16 位。 如果 lpPathName 和 lpPrefixString 参数保持不变,则将 GetTempFileName 限制为最多 65,535 个唯一文件名。
由于用于生成文件名的算法,在创建大量具有相同前缀的文件时 ,GetTempFileName 的性能可能很差。 在这种情况下,建议基于 GUID构造唯一的文件名。
此函数创建的名称为的临时文件不会自动删除。 若要删除这些文件,请调用 DeleteFile。
为了避免在转换 ANSI 字符串时出现问题,应用程序应调用 CreateFile 函数来创建临时文件。
在 Windows 8 和 Windows Server 2012 中,此函数由以下技术支持。
技术 | 支持 |
---|---|
服务器消息块 (SMB) 3.0 协议 | 是 |
SMB 3.0 透明故障转移 (TFO) | 是 |
具有横向扩展文件共享的 SMB 3.0 (SO) | 是 |
群集共享卷文件系统 (CSV) | 是 |
弹性文件系统 (ReFS) | 是 |
示例
有关示例,请参阅 创建和使用临时文件。
注意
fileapi.h 标头将 GetTempFileName 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定。
要求
最低受支持的客户端 | Windows XP [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | fileapi.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |