【发布时间】:2011-05-19 08:09:39
【问题描述】:
我想了解这些函数之间的区别是什么,我应该使用它们中的哪一个来处理路径?
例如:我想要 "C:\Temp" + "..\Folder" = "C:\Folder"
谢谢
【问题讨论】:
我想了解这些函数之间的区别是什么,我应该使用它们中的哪一个来处理路径?
例如:我想要 "C:\Temp" + "..\Folder" = "C:\Folder"
谢谢
【问题讨论】:
假设:
lpStr1、lpStr2和lpStr3是三个指针,每个指针指向不同的字符串。
和
str1、str2 和 str3 是 std::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 解决,使用PathAppend 总是比PathCombine 更好、更有效率。
否则,如果您的问题无法使用PathAppend 解决,但可以使用PathCombine 解决,则只能使用PathCombine。
【讨论】:
PathCanonicalize() 可能值得一提,以防字符串已经连接。
【讨论】:
您必须为此使用PathCombine。
连接两个字符串 表示正确形成的路径 一条路;也连接任何 相对路径元素。
PathAppend 根据 MSN 文档明确排除了相对路径限定符:
pszPath 中提供的路径不能 以“..\”或“.\”开头产生 一个相对路径字符串。
【讨论】: