_splitpath_s
, _wsplitpath_s
パス名をコンポーネントに分割します。 これらの関数は、「CRT のセキュリティ機能」で説明されているように、セキュリティが強化されたバージョンの _splitpath
、_wsplitpath
です。
構文
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
パラメーター
path
完全パス。
drive
ドライブ文字、その後にコロン (:
)。 ドライブ文字が不要な場合は、このパラメーターに NULL
を渡すことができます。
driveNumberOfElements
1 バイト文字またはワイド文字単位の drive
バッファーのサイズ。 drive
が NULL
である場合、この値は 0 でなければなりません。
dir
末尾のスラッシュを含む、ディレクトリ パス。 スラッシュ (/
)、バックスラッシュ (\\
)、または両方を使用できます。 ディレクトリ パスが不要な場合は、このパラメーターの NULL
を渡すことができます。
dirNumberOfElements
1 バイト文字またはワイド文字単位の dir
バッファーのサイズ。 dir
が NULL
である場合、この値は 0 でなければなりません。
fname
拡張子なしの基本ファイル名。 ファイル名が不要な場合は、このパラメーターの NULL
を渡すことができます。
nameNumberOfElements
1 バイト文字またはワイド文字単位の fname
バッファーのサイズ。 fname
が NULL
である場合、この値は 0 でなければなりません。
ext
先頭のピリオド (.
) を含む、ファイル名の拡張子。 ファイル名拡張子が不要な場合は、このパラメーターの NULL
を渡すことができます。
extNumberOfElements
1 バイト文字またはワイド文字単位の ext
バッファーのサイズ。 ext
が NULL
である場合、この値は 0 でなければなりません。
戻り値
正常終了した場合は 0 を返します。失敗した場合はエラー コードを返します。
エラー条件
条件 | 戻り値 |
---|---|
path は NULL です |
EINVAL |
drive が NULL である場合、driveNumberOfElements はゼロ以外です |
EINVAL |
drive が NULL でない場合、driveNumberOfElements はゼロです |
EINVAL |
dir が NULL である場合、dirNumberOfElements はゼロ以外です |
EINVAL |
dir が NULL でない場合、dirNumberOfElements はゼロです |
EINVAL |
fname が NULL である場合、nameNumberOfElements はゼロ以外です |
EINVAL |
fname が NULL でない場合、nameNumberOfElements はゼロです |
EINVAL |
ext が NULL である場合、extNumberOfElements はゼロ以外です |
EINVAL |
ext が NULL でない場合、extNumberOfElements はゼロです |
EINVAL |
上記のいずれかの条件が発生した場合は、「パラメーターの検証で説明されているように、無効なパラメーター ハンドラー呼び出されます。 実行の継続が許可された場合、これらの関数は errno
を EINVAL
に設定し、EINVAL
を返します。
バッファーのいずれかが、結果を保持するには短すぎる場合、これらの関数はすべてのバッファーを空の文字列にクリアし、errno
を ERANGE
に設定して、ERANGE
を返します。
解説
_splitpath_s
関数は、パスを 4 つのコンポーネントに分割します。 _splitpath_s
は、現在使用中のマルチバイト コード ページに従ってマルチバイト文字シーケンスを認識し、マルチバイト文字列の引数を適切な方法で自動的に処理します。 _wsplitpath_s
は _splitpath_s
のワイド文字バージョンであり、 _wsplitpath_s
の引数はワイド文字列です。 それ以外では、これらの関数の動作は同じです
既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。
汎用テキスト ルーチンのマップ
TCHAR.H ルーチン |
_UNICODE と _MBCS が定義されていない |
_MBCS が定義されている |
_UNICODE が定義されている |
---|---|---|---|
_tsplitpath_s |
_splitpath_s |
_splitpath_s |
_wsplitpath_s |
完全なパスの各コンポーネントは、別々のバッファーに格納されます。マニフェスト定数 _MAX_DRIVE
、_MAX_DIR
、_MAX_FNAME
、_MAX_EXT
(STDLIB.H
で定義される) で、各ファイル コンポーネントの最大許容サイズを指定します。 対応するマニフェスト定数よりも大きいファイル コンポーネントでは、ヒープ破損が発生します。
マニフェスト定数の値を次の表に示します。
名前 | 値 |
---|---|
_MAX_DRIVE |
3 |
_MAX_DIR |
256 |
_MAX_FNAME |
256 |
_MAX_EXT |
256 |
完全なパスにコンポーネント (ファイル名など) が含まれていない場合、 _splitpath_s
は対応するバッファーに空の文字列を割り当てます。
C++ では、テンプレートのオーバーロードによってこれらの関数を簡単に使用できます。オーバーロードでは、バッファー長を自動的に推論できるため、サイズ引数を指定する必要がなくなります。 詳細については、「セキュリティ保護されたテンプレート オーバーロード」を参照してください。
これらの関数のデバッグ ライブラリ バージョンでは、最初にバッファーを 0xFE で埋めます。 この動作を無効にするには、_CrtSetDebugFillThreshold
を使用します。
要件
ルーチンによって返される値 | 必須ヘッダー |
---|---|
_splitpath_s |
<stdlib.h> |
_wsplitpath_s |
<stdlib.h> または <wchar.h> |
互換性の詳細については、「 Compatibility」を参照してください。
例
_makepath_s
、_wmakepath_s
の例を参照してください。
関連項目
ファイル処理
_splitpath
, _wsplitpath
_fullpath
, _wfullpath
_getmbcp
_makepath
, _wmakepath
_setmbcp