Condividi tramite


_splitpath_s, _wsplitpath_s

Suddivide un nome di percorso nei propri componenti. Queste sono versioni di _splitpath, _wsplitpath con i miglioramenti della sicurezza come descritto in Funzionalità di sicurezza in 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

Parametri

  • [in] path
    Percorso completo

  • [out] drive
    Lettera di unità, seguita da un segno di due punti (:). È possibile passare NULL per tale parametro se non è necessaria la lettera di unità.

  • [in] driveNumberOfElements
    La dimensione del buffer drive in caratteri a byte singolo o di tipo wide. Se drive è NULL, questo valore deve essere 0.

  • [out] dir
    Percorso di directory, inclusa la barra finale. Possono essere utilizzate le barre ( / ), le barre rovesciate ( \ ), oppure entrambe. È possibile passare NULL per tale parametro se non è necessario il percorso della directory.

  • [in] dirNumberOfElements
    La dimensione del buffer dir in caratteri a byte singolo o di tipo wide. Se dir è NULL, questo valore deve essere 0.

  • [out] fname
    Nome di file di base (senza estensione). È possibile passare NULL per tale parametro se non è necessario il nome del file.

  • [in] nameNumberOfElements
    La dimensione del buffer fname in caratteri a byte singolo o di tipo wide. Se fname è NULL, questo valore deve essere 0.

  • [out] ext
    Estensione del nome del file, incluso il punto iniziale (.). È possibile passare NULL per tale parametro se non è necessario disporre dell'estensione del nome di file.

  • [in] extNumberOfElements
    La dimensione del buffer ext in caratteri a byte singolo o di tipo wide. Se ext è NULL, questo valore deve essere 0.

Valore restituito

Zero se ha esito positivo; un codice di errore in caso di errore.

Condizioni di errore

Condizione

Valore restituito

path è NULL

EINVAL

drive è NULL, driveNumberOfElements è diverso da zero

EINVAL

drive non è NULL, driveNumberOfElements è zero

EINVAL

dir è NULL, dirNumberOfElements è diverso da zero

EINVAL

dir non è NULL, dirNumberOfElements è zero

EINVAL

fname è NULL, nameNumberOfElements è diverso da zero

EINVAL

fname non è NULL, nameNumberOfElements è zero

EINVAL

ext è NULL, extNumberOfElements è diverso da zero

EINVAL

ext non è NULL, extNumberOfElements è zero

EINVAL

Se si verifica una qualsiasi delle condizioni riportate sopra, viene invocato il gestore di parametro non valido, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, queste funzioni impostano errno a EINVAL e restituiscono EINVAL.

Se uno dei buffer è troppo breve per mantenere il risultato, queste funzioni cancellano il contenuto di tutti i buffer e vi inseriscono stringhe vuote, impostano errno a ERANGE e restituiscono ERANGE.

Note

La funzione _splitpath_s suddivide un percorso nelle quattro componenti. La funzione _splitpath_s gestisce automaticamente gli handle della stringa con caratteri multibyte in base alle proprie esigenze, riconoscendo le sequenze di caratteri multibyte in base alla tabella codici multibyte attualmente in uso. _wsplitpath_s è una versione a caratteri wide di _splitpath_s; gli argomenti di _wsplitpath_s sono stringhe a caratteri wide. Altrimenti queste funzioni si comportano in modo identico.

Mapping di routine di testo generico

Routine TCHAR.H

_UNICODE & _MBCS non definiti

_MBCS definito

_UNICODE definito

_tsplitpath_s

_splitpath_s

_splitpath_s

_wsplitpath_s

Ogni componente del percorso completo viene archiviata in un buffer distinto; le costanti di manifesto _MAX_DRIVE, _MAX_DIR, _MAX_FNAME e _MAX_EXT (definite in STDLIB.H) specificano la dimensione massima consentita per ogni componente del file. Componenti di file più grandi delle costanti di manifesto corrispondenti causano danni all'heap.

Nella tabella seguente sono elencati i valori delle costanti di manifesto.

Nome

Valore

_MAX_DRIVE

3

_MAX_DIR

256

_MAX_FNAME

256

_MAX_EXT

256

Se il percorso completo non contiene un componente (ad esempio, un nome di file), _splitpath_s assegna una stringa vuota al buffer corrispondente.

In C++, l'utilizzo di queste funzioni viene semplificato da overload del modello; gli overload possono dedurre la lunghezza del buffer automaticamente, eliminando la necessità di specificare un argomento per la dimensione. Per ulteriori informazioni, vedere Overload di modelli sicuri.

La versione di debug di queste funzioni per prima cosa riempiono il buffer con il valore 0xFD. Per disattivare questo comportamento, utilizzare _CrtSetDebugFillThreshold.

Requisiti

Routine

Intestazione obbligatoria

_splitpath_s

<stdlib.h>

_wsplitpath_s

<stdlib.h> o <wchar.h>

Per ulteriori informazioni sulla compatibilità, vedere Compatibilità nell'Introduzione.

Esempio

Vedere l'esempio per _makepath_s, _wmakepath_s.

Equivalente .NET Framework

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

Vedere anche

Riferimenti

Gestione di file

_splitpath, _wsplitpath

_fullpath, _wfullpath

_getmbcp

_makepath, _wmakepath

_setmbcp