_splitpath_s
, _wsplitpath_s
Разбивает имя пути на компоненты. Эти функции — это версии с улучшениями безопасности, _wsplitpath
как описано в функциях безопасности в CRT._splitpath
Синтаксис
errno_t _splitpath_s(
const char * path,
char * drive,
size_t driveNumberOfElements,
char * dir,
size_t dirNumberOfElements,
char * fname,
size_t nameNumberOfElements,
char * ext,
size_t extNumberOfElements
);
errno_t _wsplitpath_s(
const wchar_t * path,
wchar_t * drive,
size_t driveNumberOfElements,
wchar_t *dir,
size_t dirNumberOfElements,
wchar_t * fname,
size_t nameNumberOfElements,
wchar_t * ext,
size_t extNumberOfElements
);
template <size_t drivesize, size_t dirsize, size_t fnamesize, size_t extsize>
errno_t _splitpath_s(
const char *path,
char (&drive)[drivesize],
char (&dir)[dirsize],
char (&fname)[fnamesize],
char (&ext)[extsize]
); // C++ only
template <size_t drivesize, size_t dirsize, size_t fnamesize, size_t extsize>
errno_t _wsplitpath_s(
const wchar_t *path,
wchar_t (&drive)[drivesize],
wchar_t (&dir)[dirsize],
wchar_t (&fname)[fnamesize],
wchar_t (&ext)[extsize]
); // C++ only
Параметры
path
Полный путь.
drive
Буква диска с двоеточием в конце (:
). Этот параметр можно передать NULL
, если буква диска не нужна.
driveNumberOfElements
Размер буфера drive
в однобайтовых или расширенных символах. Если параметр drive
имеет значение NULL
, это значение должно быть 0.
dir
Путь к каталогу, включая заключительную косую черту. Могут использоваться символы косой черты (/
), обратной косой черты (\\
) или оба. Этот параметр можно передать NULL
, если путь к каталогу не нужен.
dirNumberOfElements
Размер буфера dir
в однобайтовых или расширенных символах. Если параметр dir
имеет значение NULL
, это значение должно быть 0.
fname
Базовое имя файла (без расширения). Этот параметр можно передать NULL
, если имя файла не требуется.
nameNumberOfElements
Размер буфера fname
в однобайтовых или расширенных символах. Если параметр fname
имеет значение NULL
, это значение должно быть 0.
ext
Расширение имени файла, включая начальную точку (.
). Этот параметр можно передать NULL
, если не требуется расширение имени файла.
extNumberOfElements
Размер буфера ext
в однобайтовых или расширенных символах. Если параметр ext
имеет значение NULL
, это значение должно быть 0.
Возвращаемое значение
Возвращает нуль в случае успеха или код ошибки в случае неудачи.
Условия ошибок
Condition | Возвращаемое значение |
---|---|
path имеет значение NULL . |
EINVAL |
drive имеет значение NULL , driveNumberOfElements отличен от нуля |
EINVAL |
drive отличен от NULL , driveNumberOfElements равен нулю |
EINVAL |
dir имеет значение NULL , dirNumberOfElements отличен от нуля |
EINVAL |
dir отличен от NULL , dirNumberOfElements равен нулю |
EINVAL |
fname имеет значение NULL , nameNumberOfElements отличен от нуля |
EINVAL |
fname отличен от NULL , nameNumberOfElements равен нулю |
EINVAL |
ext имеет значение NULL , extNumberOfElements отличен от нуля |
EINVAL |
ext отличен от NULL , extNumberOfElements равен нулю |
EINVAL |
При возникновении любого из указанных выше условий вызывается обработчик недопустимых параметров, как описано в разделе проверки параметров. Если выполнение может быть продолжено, эти функции устанавливают параметр errno
в значение EINVAL
и возвращают значение EINVAL
.
Если какой-либо из этих буферов слишком мал для хранения результата, эти функции очищают все буферы, присваивают им пустые строки, устанавливают для параметра errno
значение ERANGE
и возвращают ERANGE
.
Замечания
Функция _splitpath_s
разделяет путь на четыре компонента. Функция_splitpath_s
автоматически требуемым образом обрабатывает аргументы в виде многобайтовых строк, распознавая многобайтовые последовательности символов в соответствии с текущей многобайтовой кодовой страницей. _wsplitpath_s
— это двухбайтовая версия _splitpath_s
; аргументы для _wsplitpath_s
представляют собой двухбайтовые строки. В остальном эти функции ведут себя одинаково.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Сопоставления подпрограмм универсального текста
TCHAR.H рутина |
_UNICODE и _MBCS не определен |
_MBCS Определенные |
_UNICODE Определенные |
---|---|---|---|
_tsplitpath_s |
_splitpath_s |
_splitpath_s |
_wsplitpath_s |
Каждый компонент полного пути хранится в отдельном буфере; Константы манифеста _MAX_DRIVE
, _MAX_FNAME
_MAX_DIR
и _MAX_EXT
(определенные вSTDLIB.H
) указывают максимальный допустимый размер каждого компонента файла. Компоненты файла, размер которых превышает значения соответствующих констант манифеста, могут вызвать повреждение кучи.
В приведенной ниже таблице перечислены значения констант манифеста.
Имя. | Значение |
---|---|
_MAX_DRIVE |
3 |
_MAX_DIR |
256 |
_MAX_FNAME |
256 |
_MAX_EXT |
256 |
Если полный путь не содержит компонент (например, имя файла), _splitpath_s
назначает пустую строку соответствующему буферу.
В C++ использование этих функций упрощено шаблонными перегрузками; перегрузки могут определить длину буфера автоматически, устраняя необходимость указывать аргумент size. Дополнительные сведения см. в разделе "Безопасные перегрузки шаблонов".
Версии библиотек отладки этих функций сначала заполняют буфер 0xFE. Чтобы отключить это поведение, используйте _CrtSetDebugFillThreshold
.
Требования
Маршрут | Обязательный заголовок |
---|---|
_splitpath_s |
<stdlib.h> |
_wsplitpath_s |
<stdlib.h> или <wchar.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
См. пример для _makepath_s
. _wmakepath_s
См. также
Обработка файлов
_splitpath
, _wsplitpath
_fullpath
, _wfullpath
_getmbcp
_makepath
, _wmakepath
_setmbcp