GetTempPath2A 函数 (fileapi.h)

根据调用进程的特权检索为临时文件指定的目录的路径。

语法

DWORD GetTempPath2A(
  [in]  DWORD BufferLength,
  [out] LPSTR Buffer
);

参数

[in] BufferLength

lpBuffer标识的字符串缓冲区的大小,TCHAR

[out] Buffer

指向字符串缓冲区的指针,该缓冲区接收指定临时文件路径的以 null 结尾的字符串。 返回的字符串以反斜杠结尾,例如“C:\TEMP\”。

返回值

如果函数成功,则返回值为复制到 lpBuffer的字符串的长度(TCHAr,不包括终止 null 字符)。 如果返回值大于 nBufferLength,则返回值为保留路径所需的缓冲区的长度(TCHAR)。

如果函数失败,则返回值为零。 若要获取扩展的错误信息,请调用 GetLastError

最大可能的返回值为 MAX_PATH+1 (261)。

言论

从作为 SYSTEM 运行的进程调用此函数时,它将返回不可访问的非 SYSTEM 进程的路径 C:\Windows\SystemTemp。 对于非系统进程,GetTempPath2 的行为与 getTempPath相同。

对于系统进程,GetTempPath2 函数检查环境变量是否存在 SystemTemp。 如果设置了此环境变量,它将使用环境变量的值作为路径,而不是 C: 驱动器上的默认系统提供的路径。

注意

GetTempPath2 存在的原因,并且默认返回 C:\Windows\SystemTemp 是因为该目录是 ACL,具有正确的权限以防止常见的路径重定向问题。 出于安全原因,仅将 SystemTemp 环境变量设置为仅允许 SYSTEM 进程/管理员访问它的目录。

对于非系统进程,GetTempPath2 函数按以下顺序检查是否存在环境变量,并使用找到的第一个路径:

  1. TMP 环境变量指定的路径。
  2. TEMP 环境变量指定的路径。
  3. USERPROFILE 环境变量指定的路径。
  4. Windows 目录。

请注意,该函数不验证路径是否存在,也不会测试当前进程是否对路径具有任何类型的访问权限。 GetTempPath2 函数返回格式正确的字符串,该字符串根据前面指定的环境变量搜索顺序指定完全限定的路径。 在对文件 I/O 操作使用之前,应用程序应验证路径是否存在以及对路径的充分访问权限。

符号链接行为: 如果路径指向符号链接,临时路径名称将维护任何符号链接。

在 Windows 8 和 Windows Server 2012 中,以下技术支持此函数:

科技 支持
服务器消息块 (SMB) 3.0 协议 是的
SMB 3.0 透明故障转移 (TFO) 是的
具有横向扩展文件共享的 SMB 3.0 (SO) 是的
群集共享卷文件系统 (CsvFS) 是的
可复原文件系统 (ReFS) 是的

注意

安装 2025 年 3 月及更高版本的 Windows 更新时,Windows 10 版本 1607(内部版本 14393.7876)及更高版本以及 Windows Server 2016 内部版本 14393.7876 及更高版本支持此 API。 有关详细信息 ,请参阅KB5053594

例子

有关示例,请参阅 创建和使用临时文件

注意

fileapi.h 标头将 GetTempPath2 定义为基于 UNICODE 预处理器常量定义自动选择此函数的 ANSI 或 Unicode 版本的别名。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows 11 内部版本 22000
支持的最低服务器 Windows Server 2022 内部版本 20348
标头 fileapi.h (包括 Windows.h)
Kernel32.lib
DLL Kernel32.dll

另请参阅

文件管理功能

GetTempFileName

符号链接