【问题标题】:Difference between PathAppend and PathCombine in Win32 APIWin32 API 中 PathAppend 和 PathCombine 的区别
【发布时间】:2011-05-19 08:09:39
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: c++ path winapi


    【解决方案1】:

    假设:

    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 解决,使用PathAppend 总是比PathCombine 更好、更有效率。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      【解决方案3】:

      您必须为此使用PathCombine

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

      PathAppend 根据 MSN 文档明确排除了相对路径限定符:

      pszPath 中提供的路径不能 以“..\”或“.\”开头产生 一个相对路径字符串。

      【讨论】:

      • 根据文档,第一个参数不能以..\或.\开头,但对第二个参数没有限制。在给定的场景中, pszMore 有 ..\。它适用于 PathAppend。
      猜你喜欢
      • 2017-03-04
      • 2011-11-17
      • 2010-12-15
      • 2011-11-13
      • 2019-06-26
      • 1970-01-01
      • 2015-04-17
      • 2023-03-05
      • 2010-10-14
      相关资源
      最近更新 更多