Win32 API中PathAppend和PathCombine之间的区别

时间:2010-12-02 19:16:31

标签: c++ path winapi

我想了解这些功能之间的区别,以及我应该使用哪些功能来处理路径?

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

由于

3 个答案:

答案 0 :(得分:3)

您必须使用PathCombine

  

连接两个字符串   表示正确形成的路径   一条路;也连接任何   相对路径元素。

根据MSN文档,

PathAppend专门排除相对路径限定符:

  

pszPath中提供的路径不能   以“.. \”或“。\”开头制作   相对路径字符串。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

假设:

lpStr1lpStr2lpStr3是三个指针,每个都指向不同的字符串。

str1str2str3std::string类型的三个对象。

然后

PathCombine(lpStr1, lpStr2, lpStr3);

类似于

strcpy(lpStr1, lpStr2);
strcat(lpStr1, lpStr3);

类似于

str1 = str2 + str3;

PathAppend(lpStr1, lpStr2);

类似于

strcat(lpStr1, lpStr2);

类似于

str1 += str2;

相当于

str1 = str1 + str2

理论上PathAppend只能用PathCombine来实现:

PathAppend(lpStr1,lpStr2);

等同于

PathCombine(lpStr1, lpStr1, lpStr2);

因此,PathAppend可以完成的所有任务也可以由PathCombine完成,但是事实并非如此。

因此,只要您可以使用PathAppend完成任务,然后使用PathAppend

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

如果您的任务不能用PathCombine完成,那么肯定不能用PathAppend完成,您将不得不使用另一个API来完成任务。

始终使用PathAppend而不是PathCombine的原因,如果可能,是因为PathAppend所需的参数少于PathCombine,并且缩短您的代码。

如果您可以使用PathAppend解决问题,但使用PathCombine,则对PathCombine的调用中的第一个和第二个参数是相同的,并且您可能重复了代码和类型您的代码中还有更多字符。

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

因此,只要可以使用PathAppend来解决问题,使用PathCombine总是比PathAppend更好,效率更高。

否则,如果您的问题不能用PathAppend解决,但只能用PathCombine解决,请使用PathCombine