C++ Win32 API中PathAppend和PathCombine的区别

C++ Win32 API中PathAppend和PathCombine的区别,c++,path,winapi,C++,Path,Winapi,我想了解这些函数之间的区别是什么,我应该使用哪一个来处理路径 例如:我想要“C:\Temp”+。\Folder“=“C:\Folder” 谢谢您必须使用它 连接两个 将正确形成的路径表示为 一条路;还连接任何 相对路径元素 根据MSN文档,特别排除了相对路径限定符: 无法使用pszPath中提供的路径 以“.\”或“.\”开头生成 相对路径字符串 PathCanonicalize()可能值得一提,以防字符串已连接。假设: lpStr1、lpStr2和lpStr3是三个指针,每个指针指向不同的字符

我想了解这些函数之间的区别是什么,我应该使用哪一个来处理路径

例如:我想要“C:\Temp”+。\Folder“=“C:\Folder”

谢谢

您必须使用它

连接两个 将正确形成的路径表示为 一条路;还连接任何 相对路径元素

根据MSN文档,特别排除了相对路径限定符:

无法使用pszPath中提供的路径 以“.\”或“.\”开头生成 相对路径字符串

PathCanonicalize()可能值得一提,以防字符串已连接。

假设:

lpStr1
lpStr2
lpStr3
是三个指针,每个指针指向不同的字符串

str1
str2
str3
是类型为
std::string
的三个对象

然后

类似于

strcpy(lpStr1, lpStr2);
strcat(lpStr1, lpStr3);
strcat(lpStr1, lpStr2);
这是一个类比

str1=str2+str3

PathAppend(lpStr1,lpStr2)

类似于

strcpy(lpStr1, lpStr2);
strcat(lpStr1, lpStr3);
strcat(lpStr1, lpStr2);
这是一个类比

str1+=str2

这相当于

str1=str1+str2

理论上,
PathAppend
只能通过
PathCombine
实现:

PathAppend(lpStr1,lpStr2)

相当于

PathCombine(lpStr1、lpStr1、lpStr2)

因此,可以通过
PathAppend
完成的每个任务也可以通过
PathCombine
完成,但事实并非如此

因此,只要您可以使用
pathpappend
完成任务,就可以使用
pathpappend

如果您的任务不能通过
PathAppend
完成,但可以通过
PathCombine
完成,请使用
PathCombine

如果使用
PathCombine
无法完成任务,那么使用
PathAppend
肯定无法完成任务,您必须使用另一个API来完成任务

始终使用
pathpappend
而不是
PathCombine
如果可能的话,是因为
pathpappend
PathCombine
需要更少的参数,而且它也缩短了代码

如果您可以使用
PathAppend
解决问题,但改用
PathCombine
,则对
PathCombine
的调用中的第一个和第二个参数相同,您可能会重复代码并在代码中键入更多字符

在这种情况下,
PathCombine
行比
PathAppend
行长,这会降低代码的可读性

因此,只要您的问题可以通过
pathpappend
解决,使用
pathpappend
总是比使用
PathCombine
更好、更高效


否则,如果您的问题无法通过
PathAppend
解决,但只能通过
PathCombine
解决,则使用
PathCombine

根据文档,第一个参数不能以..\or.\开头,但对第二个参数没有限制。在给定的场景中,pszMore有..\。它将为PathAppend工作对于win8及更高版本,存在问题较少的“Cch”版本(采用结果缓冲区大小值)