_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 del 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 | Valor |
---|---|
_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 plantilla 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