PathCchCombineEx 函数 (pathcch.h)

将两个路径片段合并为一个路径。 此函数还规范化任何相对路径元素,删除“.”和“...”元素以简化最终路径。

此函数与 PathCchCombine 的不同之处在于,它允许构造更长的最终路径。

此函数与 PathAllocCombine 的不同之处在于,调用方必须声明存储在堆栈上的返回字符串的大小。

此函数与 PathCombine 的不同之处在于,它接受带有“\”、“\?”和“\?\UNC”前缀的路径。

注意 应使用此函数 PathCchCombinePathAllocCombine 代替 PathCombine ,以防止出现缓冲区溢出的可能性。

语法

WINPATHCCHAPI HRESULT PathCchCombineEx(
  [out]          PWSTR  pszPathOut,
  [in]           size_t cchPathOut,
  [in, optional] PCWSTR pszPathIn,
  [in, optional] PCWSTR pszMore,
  [in]           ULONG  dwFlags
);

参数

[out] pszPathOut

指向缓冲区的指针,当此函数成功返回时,该缓冲区接收组合的路径字符串。 此参数可以指向 与 pszPathInpszMore 相同的缓冲区。

[in] cchPathOut

pszPathOut 指向的缓冲区的大小(以字符为单位)。

[in, optional] pszPathIn

指向第一个路径字符串的指针。 此值可以为 NULL

[in, optional] pszMore

指向第二个路径字符串的指针。 如果此路径以单个反斜杠开头,则它仅与 pszPathIn 指向的路径的根组合在一起。 如果此路径是完全限定的,则直接将其复制到输出缓冲区,而不与其他路径合并。 此值可以为 NULL

[in] dwFlags

以下一个或多个标志:

含义
PATHCCH_NONE
0x0000000
不允许构造 \\?\ 路径, (即,长路径) 长于 MAX_PATH
PATHCCH_ALLOW_LONG_PATHS
0x00000001
允许构造长度超过 MAX_PATH 的 \\?\ 路径。 请注意, cchPathOut 必须大于 MAX_PATH。 否则,将忽略此标志。
PATHCCH_FORCE_ENABLE_LONG_NAME_PROCESS
0x00000002
强制 API 将调用方视为已启用长路径,与进程的长名称启用状态无关。 此选项只能在指定 PATHCCH_ALLOW_LONG_PATHS 时使用,不能与 PATHCCH_FORCE_DISABLE_LONG_NAME_PROCESS一起使用。

注意此值从 Windows 10 版本 1703 开始可用。

PATHCCH_FORCE_DISABLE_LONG_NAME_PROCESS
0x00000004
强制 API 将调用方视为已禁用的长路径,与进程的长名称启用状态无关。 仅当指定 了PATHCCH_ALLOW_LONG_PATHS 时,此选项才能使用,不能与 PATHCCH_FORCE_ENABLE_LONG_NAME_PROCESS一起使用。

注意此值从 Windows 10 版本 1703 开始可用。

PATHCCH_DO_NOT_NORMALIZE_SEGMENTS
0x00000008
禁用路径段的规范化,包括删除尾随点和空格。 这允许访问 win32 路径规范化将阻止的路径。

注意此值从 Windows 10 版本 1703 开始可用。

PATHCCH_ENSURE_IS_EXTENDED_LENGTH_PATH
0x00000010
将输入路径转换为扩展长度 DOS 设备路径窗体, (带有 \\?\ 前缀) (如果尚未处于该格式)。 这将允许访问由于 Win32 规范化规则 (而无法寻址的路径,这些规则可以去除尾随点和空格) 和路径长度限制。 此选项意味着 PATHCCH_DO_NOT_NORMALIZE_SEGMENTS的相同行为。

注意此值从 Windows 10 版本 1703 开始可用。

返回值

此函数返回 HRESULT 代码,包括以下内容。

返回代码 说明
S_OK
函数成功。 请注意,这还包括空扩展名的情况,例如后跟没有字符的句点。 在这种情况下,原始字符串将不变地返回。
E_INVALIDARG
此值可能由多种因素引起,例如 pszPathOut 参数设置为 NULL,或 cchPathOut 值设置为 0 或大于 PATHCCH_MAX_CCH 的值。
E_OUTOFMEMORY
函数无法分配足够的内存来执行该操作。
PATHCCH_E_FILENAME_TOO_LONG
一个或两个原始路径的大小超过了 PATHCCH_MAX_CCH

注解

如果 pszPathInpszMore 均为 NULL 或指向空字符串,则会将单个反斜杠复制到 pszPathOut 指向的缓冲区。

要求

要求
最低受支持的客户端 Windows 8 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2012 [桌面应用 |UWP 应用]
目标平台 Windows
标头 pathcch.h
Library Pathcch.lib

另请参阅

PathCchCanonicalize

PathCchCanonicalizeEx

PathCchCombine