Разница между PathAppend и PathCombine в Win32 API - PullRequest
6 голосов
/ 02 декабря 2010

Я хочу понять, в чем разница между этими функциями, и какую из них мне следует использовать для работы с путями?

Например: я хочу "C: \ Temp" + ".. \ Folder"= "C: \ Папка"

Спасибо

Ответы [ 3 ]

3 голосов
/ 03 декабря 2010

PathCanonicalize () стоит упомянуть, если строки уже объединены.

3 голосов
/ 02 декабря 2010

Для этого вы должны использовать PathCombine .

Объединяет две строки, которые представлять правильно сформированные пути в один путь; также объединяет любые элементы относительного пути.

PathAppend специально исключает относительные квалификаторы пути в соответствии с документами MSN:

Путь, указанный в pszPath, не может начать с ".. \" или ". \", чтобы произвести строка относительного пути.

0 голосов
/ 25 июня 2018

Предположим, что:

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 всегда лучше и продуктивнее, чем PathCombine, если ваша проблема может быть решена с помощью PathAppend.

В противном случае, если ваша проблема не может быть решена с помощью PathAppend, но может быть решена только с PathCombine, тогда используйте PathCombine.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...