Partager via


_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_DRIVEmanifeste , , _MAX_FNAME_MAX_DIRet _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