Partager via


_splitpath_s, _wsplitpath_s

Divise un nom de chemin d'accès en ses composants élémentaires. Il s'agit de versions de _splitpath, _wsplitpath avec des améliorations de sécurité, comme décrit dans Fonctionnalités de sécurité dans le 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

Paramètres

  • [in] path
    Chemin d'accès complet.

  • [out] drive
    Lettre de lecteur, suivi de deux-points (:). Vous pouvez passer NULL pour ce paramètre si vous n'avez pas besoin de la lettre de lecteur.

  • [in] driveNumberOfElements
    La taille de la mémoire tampon drive en caractères codés sur un octet ou en caractères larges. Si drive is NULL, cette valeur doit être 0.

  • [out] dir
    Chemin d'accès au répertoire, invluant la barre oblique finale. Des barres obliques ( / ), les barres obliques inverses ( \ ), ou les deux peuvent être utilisées. Vous pouvez passer NULL pour ce paramètre si vous n'avez pas besoin du chemin d'accès.

  • [in] dirNumberOfElements
    La taille de la mémoire tampon dir en caractères codés sur un octet ou en caractères larges. Si dir is NULL, cette valeur doit être 0.

  • [out] fname
    Nom du fichier de base (sans l'extension). Vous pouvez passer NULL pour ce paramètre si vous n'avez pas besoin du nom du fichier.

  • [in] nameNumberOfElements
    La taille de la mémoire tampon fname en caractères codés sur un octet ou en caractères larges. Si fname is NULL, cette valeur doit être 0.

  • [out] ext
    Extension du nom de fichier, y compris le principal point (.)). Vous pouvez passer NULL pour ce paramètre si vous n'avez pas besoin de l'extension de nom de fichier.

  • [in] extNumberOfElements
    La taille de la mémoire tampon ext en caractères codés sur un octet ou en caractères larges. Si ext is NULL, cette valeur doit être 0.

Valeur de retour

Zéro si l'opération a réussi ; code d'erreur en cas de échec.

Conditions d'erreur

Condition

Valeur de retour

path est NULL

EINVAL

drive est NULL, driveNumberOfElements est non NULL

EINVAL

drive est non-NULL, driveNumberOfElements est NULL

EINVAL

dir est NULL, dirNumberOfElements est non NULL

EINVAL

dir est non-NULL, dirNumberOfElements est NULL

EINVAL

fname est NULL, nameNumberOfElements est non NULL

EINVAL

fname est non-NULL, nameNumberOfElements est NULL

EINVAL

ext est NULL, extNumberOfElements est non NULL

EINVAL

ext est non-NULL, extNumberOfElements est NULL

EINVAL

Si l'une de ces conditions d'erreur ci-dessus se produit, le gestionnaire de paramètre non valide est appelé, comme décrit dans Validation de paramètre. Si l'exécution est autorisée à se poursuivre, ces fonctions définissent errno à la valeur EINVAL et retournent EINVAL.

Si l'une au moins des mémoires tampons est trop petite pour retenire le résultat, ces fonctions effacent toutes les mémoires tampons et les remplacent pas des chaînes vides, affectent errno à ERANGE, et retournent ERANGE.

Notes

La fonction _splitpath_s divise un chemin d'accès par ses quatre composants. _splitpath_s gère automatiquement des arguments de chaîne de caractères multi-octets comme appropriés, en identifiant des séquences de caractères multi-octets d'après la page de codes multioctets en cours d'utilisation. _wsplitpath_s est une version à large caractères de _splitpath_s; les arguments de _wsplitpath_s sont des chaînes de caractères larges. Ces fonctions se comportent sinon de façon identique.

Mappages de routines de texte générique

Routine TCHAR.H

_UNICODE & _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ée dans une mémoire tampon distincte ; les constantes explicites _MAX_DRIVE, _MAX_DIR, _MAX_FNAME, et _MAX_EXT (définies dans STDLIB.H) spécifient la taille maximale autorisée pour chaque composant de fichier. Les composants des fichiers de dimensions supérieures aux constantes explicites correspondantes engendrent la corruption des données des segments de mémoires.

Le tableau suivant répertorie les valeurs des constantes explicites.

Nom

Valeur

_MAX_DRIVE

3

_MAX_DIR

256

_MAX_FNAME

256

_MAX_EXT

256

Si le chemin complet ne contient aucun composant (par exemple, un nom de fichier), _splitpath_s affecte une chaîne vide à la mémoire tampon correspondante.

En C++, l'utilisation de ces fonctions est simplifiée par des surcharges de modèle ; les surcharges peuvent également déduire la longueur de la mémoire tampon automatiquement, en éliminant le besoin de spécifier un argument de taille. Pour plus d'informations, consultez Sécuriser les surcharges de modèle.

Les versions debug de ces fonctions remplissent d'abord la mémoire tampon avec 0xFD. Pour désactiver ce comportement, utilisez _CrtSetDebugFillThreshold.

Configuration requise

Routine

En-tête requis

_splitpath_s

<stdlib.h>

_wsplitpath_s

<stdlib.h> ou <wchar.h>

Pour plus d'informations sur la compatibilité, consultez Compatibilité dans l'introduction.

Exemple

Consultez l'exemple pour _makepath_s, _wmakepath_s.

Équivalent .NET Framework

Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez Exemples d'appel de plateforme.

Voir aussi

Référence

Gestion de fichiers

_splitpath, _wsplitpath

_fullpath, _wfullpath

_getmbcp

_makepath, _wmakepath

_setmbcp