Разница между PathAppend и PathCombine в Win32 API

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

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

спасибо

3 ответов


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

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

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

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


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


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

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 line и это делает ваш код также меньше читаемый.

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

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