Поделиться через


_splitpath_s, _wsplitpath_s

Разбивает путь на компоненты. Здесь представлены версии _splitpath, _wsplitpath с усовершенствованной безопасностью, как описано в разделе Функции безопасности в CRT.

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.

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

Нуль, если успешно; код ошибки при неудаче.

Условия возникновения ошибки

Условие

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

Параметр 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 представляют собой расширенные строки. В остальном эти функции ведут себя идентично.

Универсальное текстовое сопоставление функций

Подпрограмма TCHAR.H

_UNICODE & _MBCS не определены

_MBCS определено

_UNICODE определено

_tsplitpath_s

_splitpath_s

_splitpath_s

_wsplitpath_s

Каждый компонент полного пути хранится в отдельном буфере; константы манифеста _MAX_DRIVE, _MAX_DIR, _MAX_FNAME и _MAX_EXT (определены в STDLIB.H) определяют максимальный допустимый размер каждого компонента файла. Компоненты файла, размер которых превышает соответствующие константы манифеста, могут вызвать повреждение кучи.

В приведенной ниже таблице перечислены значения констант манифеста.

Имя

Значение

_MAX_DRIVE

3

_MAX_DIR

256

_MAX_FNAME

256

_MAX_EXT

256

Если полный путь не содержит компонент (например, имя файла), то _splitpath_s присваивает пустую строку соответствующему буферу.

В C++ использование этих функций упрощено шаблонными перегрузками; перегрузки могут определить длину буфера автоматически, устранена необходимость указывать аргумент size. Дополнительные сведения см. в разделе Безопасные перегрузки шаблонов.

Отладочные версии этих функций сначала заполняют буфер значением 0xFD. Для отключения данного поведения используйте _CrtSetDebugFillThreshold.

Требования

Подпрограмма

Обязательный заголовок

_splitpath_s

<stdlib.h>

_wsplitpath_s

<stdlib.h> или <wchar.h>

Дополнительные сведения о совместимости см. в разделе Совместимость во введении.

Пример

См. пример в разделе _makepath_s, _wmakepath_s.

Эквивалент в .NET Framework

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

См. также

Ссылки

Обработка файлов

_splitpath, _wsplitpath

_fullpath, _wfullpath

_getmbcp

_makepath, _wmakepath

_setmbcp