_splitpath_s, _wsplitpath_s

Divide un nombre de ruta de acceso en componentes. Estas funciones son versiones de _splitpath, _wsplitpath con mejoras de seguridad como se describe en Características de seguridad de CRT.

Sintaxis

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

Parámetros

path
Ruta de acceso completa.

drive
Letra de unidad, seguida de dos puntos (:). Puede pasar NULL para este parámetro si no necesita la letra de unidad.

driveNumberOfElements
Tamaño del búfer drive en caracteres de un solo byte o en caracteres anchos. Si drive es NULL, este valor debe ser 0.

dir
Ruta de directorio, incluida la barra diagonal final. Se pueden usar las barras diagonales (/), las barras diagonales inversas (\\) o ambas. Puede pasar NULL para este parámetro si no necesita la ruta de acceso del directorio.

dirNumberOfElements
Tamaño del búfer dir en caracteres de un solo byte o en caracteres anchos. Si dir es NULL, este valor debe ser 0.

fname
Nombre de archivo base (sin extensión). Puede pasar NULL para este parámetro si no necesita el nombre de archivo.

nameNumberOfElements
Tamaño del búfer fname en caracteres de un solo byte o en caracteres anchos. Si fname es NULL, este valor debe ser 0.

ext
Extensión de nombre de archivo, incluido el punto inicial (.). Puede pasar NULL para este parámetro si no necesita la extensión de nombre de archivo.

extNumberOfElements
Tamaño del búfer ext en caracteres de un solo byte o en caracteres anchos. Si ext es NULL, este valor debe ser 0.

Valor devuelto

Devuelve cero si se ejecuta correctamente; devuelve un código de error si se produce un error.

Condiciones de error

Condición Valor devuelto
path es NULL. EINVAL
drive es NULL, mientras que driveNumberOfElements es distinto de cero EINVAL
drive es distinto de NULL, mientras que driveNumberOfElements es cero EINVAL
dir es NULL, mientras que dirNumberOfElements es distinto de cero EINVAL
dir es distinto de NULL, mientras que dirNumberOfElements es cero EINVAL
fname es NULL, mientras que nameNumberOfElements es distinto de cero EINVAL
fname es distinto de NULL, mientras que nameNumberOfElements es cero EINVAL
ext es NULL, mientras que extNumberOfElements es distinto de cero EINVAL
ext es distinto de NULL, mientras que extNumberOfElements es cero EINVAL

Si se produce alguna de las condiciones anteriores, se invoca al controlador de parámetros no válidos, como se describe en Validación de parámetros . Si la ejecución puede continuar, estas funciones establecen errno en EINVAL y devuelven EINVAL.

Si alguno de los búferes es demasiado pequeño para contener el resultado, estas funciones borran todos los búferes en cadenas vacías, establecen errno en ERANGE y devuelven ERANGE.

Comentarios

La función _splitpath_s divide una ruta de acceso en los cuatro componentes respectivos. _splitpath_s controla automáticamente argumentos de cadenas de caracteres multibyte según corresponda, reconociendo secuencias de caracteres multibyte según la página de códigos multibyte actualmente en uso. _wsplitpath_s es una versión con caracteres anchos de _splitpath_s; los argumentos a _wsplitpath_s son cadenas de caracteres anchos. Por lo demás, estas funciones se comportan exactamente igual.

De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.

Asignaciones de rutinas de texto genérico

Rutina TCHAR.H _UNICODE y _MBCS no definidos _MBCS definido _UNICODE definido
_tsplitpath_s _splitpath_s _splitpath_s _wsplitpath_s

Cada componente de la ruta de acceso completa se almacena en un búfer independiente; las constantes de manifiesto _MAX_DRIVE, _MAX_DIR, _MAX_FNAME y _MAX_EXT (definidas en STDLIB.H) especifican el tamaño máximo permitido para cada componente de archivo. Los componentes de archivos que son más grandes que las constantes de manifiesto correspondientes provocan daños en el montón.

En la tabla siguiente se enumeran los valores de las constantes de manifiesto.

NOMBRE Value
_MAX_DRIVE 3
_MAX_DIR 256
_MAX_FNAME 256
_MAX_EXT 256

Si la ruta de acceso completa no contiene un componente (por ejemplo, un nombre de archivo), _splitpath_s asigna una cadena vacía al búfer correspondiente.

En C++, el uso de estas funciones se simplifica mediante sobrecargas de plantilla. Las sobrecargas pueden deducir la longitud del búfer automáticamente, lo que elimina la necesidad de especificar un argumento de tamaño. Para obtener más información, consulte Sobrecargas de plantillas seguras.

Las versiones de la biblioteca de depuración de estas funciones rellenan primero el búfer con 0xFE. Para deshabilitar este comportamiento, use _CrtSetDebugFillThreshold.

Requisitos

Routine Encabezado necesario
_splitpath_s <stdlib.h>
_wsplitpath_s <stdlib.h> o <wchar.h>

Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Ejemplo

Consulte el ejemplo de _makepath_s, _wmakepath_s.

Consulte también

Control de archivos
_splitpath, _wsplitpath
_fullpath, _wfullpath
_getmbcp
_makepath, _wmakepath
_setmbcp