_splitpath_s
, _wsplitpath_s
Divise un nom de chemin en composants. Ces fonctions sont des versions de _splitpath
, _wsplitpath
avec des améliorations de sécurité, comme indiqué dans Fonctionnalités de sécurité dans le CRT.
Syntaxe
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
Paramètres
path
Chemin complet.
drive
Lettre de lecteur suivie de deux-points (:
). Vous pouvez passer NULL
ce paramètre si vous n’avez pas besoin de la lettre de lecteur.
driveNumberOfElements
Taille de la mémoire tampon drive
en caractères larges ou codés sur un octet. Si drive
a la valeur NULL
, cette valeur doit être égale à 0.
dir
Chemin de répertoire incluant une barre oblique de fin. Il est possible d’utiliser des barres obliques ( /
), des barres obliques inverses ( \\
) ou les deux à la fois. Vous pouvez passer NULL
ce paramètre si vous n’avez pas besoin du chemin d’accès au répertoire.
dirNumberOfElements
Taille de la mémoire tampon dir
en caractères larges ou codés sur un octet. Si dir
a la valeur NULL
, cette valeur doit être égale à 0.
fname
Nom de fichier de base (sans extension). Vous pouvez passer NULL
ce paramètre si vous n’avez pas besoin du nom de fichier.
nameNumberOfElements
Taille de la mémoire tampon fname
en caractères larges ou codés sur un octet. Si fname
a la valeur NULL
, cette valeur doit être égale à 0.
ext
Extension de nom de fichier incluant le point de début (.
). Vous pouvez passer NULL
ce paramètre si vous n’avez pas besoin de l’extension de nom de fichier.
extNumberOfElements
Taille de la mémoire tampon ext
en caractères larges ou codés sur un octet. Si ext
a la valeur NULL
, cette valeur doit être égale à 0.
Valeur retournée
Zéro si l'opération a réussi ; code d'erreur en cas de échec.
Conditions d’erreur
Condition | Valeur retournée |
---|---|
path est NULL |
EINVAL |
drive a la valeur NULL , driveNumberOfElements est différent de zéro |
EINVAL |
drive n’a pas la valeur NULL , driveNumberOfElements est égal à zéro |
EINVAL |
dir a la valeur NULL , dirNumberOfElements est différent de zéro |
EINVAL |
dir n’a pas la valeur NULL , dirNumberOfElements est égal à zéro |
EINVAL |
fname a la valeur NULL , nameNumberOfElements est différent de zéro |
EINVAL |
fname n’a pas la valeur NULL , nameNumberOfElements est égal à zéro |
EINVAL |
ext a la valeur NULL , extNumberOfElements est différent de zéro |
EINVAL |
ext n’a pas la valeur NULL , extNumberOfElements est égal à zéro |
EINVAL |
Si l’une des conditions ci-dessus se produit, le gestionnaire de paramètres non valide est appelé, comme décrit dans la validation des paramètres. Si l'exécution est autorisée à se poursuivre, ces fonctions attribuent à errno
la valeur EINVAL
et retournent EINVAL
.
Si la taille de l’une des mémoires tampons ne suffit pas à contenir le résultat, ces fonctions remplacent le contenu de toutes les mémoires tampons par des chaînes vides, affectent à errno
la valeur ERANGE
et retournent ERANGE
.
Notes
La fonction _splitpath_s
divise un chemin en quatre composants. _splitpath_s
gère automatiquement les arguments de chaîne de caractères multioctets si nécessaire, en identifiant les séquences de caractères multioctets en fonction de la page de codes multioctets en cours d’utilisation. _wsplitpath_s
est une version à caractères larges de _splitpath_s
; les arguments de _wsplitpath_s
sont des chaînes à caractères larges. Sinon, ces fonctions se comportent de façon identique.
Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.
Mappages de routines de texte générique
Routine TCHAR.H |
_UNICODE et _MBCS non définis |
_MBCS défini |
_UNICODE défini |
---|---|---|---|
_tsplitpath_s |
_splitpath_s |
_splitpath_s |
_wsplitpath_s |
Chaque composant du chemin d’accès complet est stocké dans une mémoire tampon distincte ; les constantes _MAX_DRIVE
manifeste , , _MAX_FNAME
_MAX_DIR
et _MAX_EXT
(définies dans STDLIB.H
) spécifient la taille maximale autorisée pour chaque composant de fichier. Les composants de fichier dont la taille dépasse celle des constantes manifestes correspondantes occasionnent une altération du tas.
Le tableau suivant répertorie les valeurs des constantes manifestes.
Nom | Valeur |
---|---|
_MAX_DRIVE |
3 |
_MAX_DIR |
256 |
_MAX_FNAME |
256 |
_MAX_EXT |
256 |
Si le chemin d’accès complet ne contient pas de composant (par exemple, un nom de fichier), _splitpath_s
attribue une chaîne vide à la mémoire tampon correspondante.
En C++, l’utilisation de ces fonctions est simplifiée par les surcharges de modèle ; les surcharges peuvent déduire automatiquement la longueur de la mémoire tampon, ce qui évite d’avoir à spécifier un argument de taille. Pour plus d'informations, consultez Sécuriser les surcharges de modèle.
Les versions de bibliothèque de débogage de ces fonctions remplissent d’abord la mémoire tampon avec 0xFE. Pour désactiver ce comportement, utilisez _CrtSetDebugFillThreshold
.
Spécifications
Routine | En-tête requis |
---|---|
_splitpath_s |
<stdlib.h> |
_wsplitpath_s |
<stdlib.h> ou <wchar.h> |
Pour plus d’informations sur la compatibilité, consultez Compatibility.
Exemple
Consultez l’exemple pour _makepath_s
, _wmakepath_s
.
Voir aussi
Gestion des fichiers
_splitpath
, _wsplitpath
_fullpath
, _wfullpath
_getmbcp
_makepath
, _wmakepath
_setmbcp