Функция PathCchCombineEx (pathcch.h)

Объединяет два фрагмента пути в один путь. Эта функция также канонизирует все относительные элементы пути, удаляя элементы "." и ".." для упрощения конечного пути.

Эта функция отличается от PathCchCombine тем, что она позволяет построить более длинный конечный путь.

Эта функция отличается от PathAllocCombine тем, что вызывающий объект должен объявить размер возвращаемой строки, которая хранится в стеке.

Эта функция отличается от PathCombine тем, что она принимает пути с префиксами "\", "\?" и "\?\UNC".

Примечание Эту функцию PathCchCombine или PathAllocCombine следует использовать вместо PathCombine , чтобы предотвратить возможность переполнения буфера.

Синтаксис

WINPATHCCHAPI HRESULT PathCchCombineEx(
  [out]          PWSTR  pszPathOut,
  [in]           size_t cchPathOut,
  [in, optional] PCWSTR pszPathIn,
  [in, optional] PCWSTR pszMore,
  [in]           ULONG  dwFlags
);

Параметры

[out] pszPathOut

Указатель на буфер, который при успешном возврате этой функции получает объединенную строку пути. Этот параметр может указывать на тот же буфер, что и pszPathIn или pszMore.

[in] cchPathOut

Размер буфера, на который указывает pszPathOut, в символах.

[in, optional] pszPathIn

Указатель на первую строку пути. Это значение может иметь значение NULL.

[in, optional] pszMore

Указатель на вторую строку пути. Если этот путь начинается с одной обратной косой черты, он объединяется только с корнем пути, на который указывает pszPathIn. Если этот путь является полным, он копируется непосредственно в выходной буфер без объединения с другим путем. Это значение может иметь значение NULL.

[in] dwFlags

Один или несколько из следующих флагов:

Значение Значение
PATHCCH_NONE
0x0000000
Не разрешайте построение путей \\?\ (т. е. длинных путей) длиннее MAX_PATH .
PATHCCH_ALLOW_LONG_PATHS
0x00000001
Разрешите построение путей \\?\ длиннее MAX_PATH. Обратите внимание, что значение cchPathOut должно быть больше MAX_PATH. Если это не так, этот флаг игнорируется.
PATHCCH_FORCE_ENABLE_LONG_NAME_PROCESS
0x00000002
Заставляет API обрабатывать вызывающий объект как включенный длинный путь, независимо от состояния процесса с поддержкой длинного имени. Этот параметр можно использовать только при указании PATHCCH_ALLOW_LONG_PATHS и не может использоваться с PATHCCH_FORCE_DISABLE_LONG_NAME_PROCESS.

Примечание Это значение доступно начиная с Windows 10 версии 1703.

PATHCCH_FORCE_DISABLE_LONG_NAME_PROCESS
0x00000004
Заставляет API обрабатывать вызывающий объект как отключенный длинный путь, независимо от состояния процесса с поддержкой длинного имени. Этот параметр можно использовать только при указании PATHCCH_ALLOW_LONG_PATHS и не может использоваться с PATHCCH_FORCE_ENABLE_LONG_NAME_PROCESS.

Примечание Это значение доступно начиная с Windows 10 версии 1703.

PATHCCH_DO_NOT_NORMALIZE_SEGMENTS
0x00000008
Отключает нормализацию сегментов пути, включая удаление конечных точек и пробелов. Это обеспечивает доступ к путям, которые будут блокироваться нормализацией путей win32.

Примечание Это значение доступно начиная с Windows 10 версии 1703.

PATHCCH_ENSURE_IS_EXTENDED_LENGTH_PATH
0x00000010
Преобразует входной путь в форму пути к устройству DOS расширенной длины (с префиксом \\?\), если он еще не в этой форме. Это обеспечивает доступ к путям, которые в противном случае недоступны из-за правил нормализации Win32 (которые могут удалять конечные точки и пробелы) и ограничений длины пути. Этот параметр подразумевает такое же поведение PATHCCH_DO_NOT_NORMALIZE_SEGMENTS.

Примечание Это значение доступно начиная с Windows 10 версии 1703.

Возвращаемое значение

Эта функция возвращает код HRESULT , включая следующий код.

Код возврата Описание
S_OK
Функция выполнена успешно. Обратите внимание, что сюда также относится пустое расширение, например точка без символов после него. В этом случае исходная строка возвращается в неотправленном виде.
E_INVALIDARG
Это значение может быть вызвано несколькими причинами, такими как параметр pszPathOut , задающий значение NULL, или значение cchPathOut , равное 0 или значение, большее PATHCCH_MAX_CCH .
E_OUTOFMEMORY
Функции не удалось выделить достаточно памяти для выполнения операции.
PATHCCH_E_FILENAME_TOO_LONG
Размер одного или обоих исходных путей превысил PATHCCH_MAX_CCH .

Комментарии

Если и pszPathIn , и pszMore имеют значение NULL или указывают на пустые строки, одна обратная косая черта копируется в буфер, на который указывает pszPathOut.

Требования

Требование Значение
Минимальная версия клиента Windows 8 [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2012 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header pathcch.h
Библиотека Pathcch.lib

См. также раздел

PathCchCanonicalize

PathCchCanonicalizeEx

PathCchCombine