Share via


PathCchCombineEx 関数 (pathcch.h)

2 つのパス フラグメントを 1 つのパスに結合します。 この関数では、相対パス要素も正規化され、"." 要素と ".." 要素が削除され、最終的なパスが簡略化されます。

この関数は PathCchCombine とは異なり、より長い最終パスを構築できます。

この関数は、呼び出し元が返される文字列のサイズを宣言する必要がある点で、 PathAllocCombine とは異なります。これはスタックに格納されます。

この関数は PathCombine とは異なり、"\"、"\?" および "\?\UNC" プレフィックスを持つパスを受け入れる点で異なります。

メモ この関数 、PathCchCombine、または PathAllocCombine は、バッファー オーバーランの可能性を防ぐために PathCombine の代わりに使用する必要があります。

構文

WINPATHCCHAPI HRESULT PathCchCombineEx(
  [out]          PWSTR  pszPathOut,
  [in]           size_t cchPathOut,
  [in, optional] PCWSTR pszPathIn,
  [in, optional] PCWSTR pszMore,
  [in]           ULONG  dwFlags
);

パラメーター

[out] pszPathOut

この関数が正常に返されると、結合されたパス文字列を受け取るバッファーへのポインター。 このパラメーターは、 pszPathIn または pszMore と同じバッファーを指すことができます。

[in] cchPathOut

pszPathOut が指すバッファーのサイズ (文字数)。

[in, optional] pszPathIn

最初のパス文字列へのポインター。 この値には NULL を指定できます。

[in, optional] pszMore

2 番目のパス文字列へのポインター。 このパスが 1 つの円記号で始まる場合は、 pszPathIn が指すパスのルートとのみ組み合わされます。 このパスが完全修飾されている場合は、他のパスと組み合わされることなく、出力バッファーに直接コピーされます。 この値には NULL を指定できます。

[in] dwFlags

次のフラグの 1 つまたは複数:

意味
PATHCCH_NONE
0x0000000
\\?\ パス (つまり、長いパス) を MAX_PATH より長く構築することはできません。
PATHCCH_ALLOW_LONG_PATHS
0x00000001
MAX_PATH よりも長い \\?\ パスの構築を許可します。 cchPathOut はMAX_PATHより大きくする必要があることに注意してください。 そうでない場合、このフラグは無視されます。
PATHCCH_FORCE_ENABLE_LONG_NAME_PROCESS
0x00000002
プロセスの長い名前が有効な状態とは関係なく、呼び出し元を長いパスが有効として処理するように API に強制します。 このオプションは、 PATHCCH_ALLOW_LONG_PATHS が指定されている場合にのみ使用でき、 PATHCCH_FORCE_DISABLE_LONG_NAME_PROCESSでは使用できません。

メモこの値は、Windows 10 バージョン 1703 以降で使用できます。

PATHCCH_FORCE_DISABLE_LONG_NAME_PROCESS
0x00000004
プロセスの長い名前が有効な状態とは関係なく、呼び出し元を長いパスが無効として API に強制的に処理します。 このオプションは、 PATHCCH_ALLOW_LONG_PATHS が指定されている場合にのみ使用でき、 PATHCCH_FORCE_ENABLE_LONG_NAME_PROCESSでは使用できません。

メモこの値は、Windows 10 バージョン 1703 以降で使用できます。

PATHCCH_DO_NOT_NORMALIZE_SEGMENTS
0x00000008
末尾のドットとスペースの削除を含むパス セグメントの正規化を無効にします。 これにより、win32 パス正規化がブロックするパスへのアクセスが可能になります。

メモこの値は、Windows 10 バージョン 1703 以降で使用できます。

PATHCCH_ENSURE_IS_EXTENDED_LENGTH_PATH
0x00000010
入力パスを拡張長 DOS デバイス パス フォーム (\\?\ プレフィックス付き) に変換します (まだその形式でない場合)。 これにより、Win32 正規化規則 (末尾のドットとスペースを削除できる) とパスの長さの制限により、アドレス指定できないパスにアクセスできます。 このオプションは、PATHCCH_DO_NOT_NORMALIZE_SEGMENTSと同じ動作を意味 します

メモこの値は、Windows 10 バージョン 1703 以降で使用できます。

戻り値

この関数は、次のような HRESULT コードを返します。

リターン コード 説明
S_OK
関数が正常に実行されました。 これには、後に文字のないピリオドなど、空の拡張子の場合も含まれていることに注意してください。 その場合、元の文字列は変更されていない状態で返されます。
E_INVALIDARG
この値は、 pszPathOut パラメーターが NULL に設定されている、 cchPathOut 値が 0 に設定されている、または PATHCCH_MAX_CCH より大 きい値など、いくつかのことが原因で発生する可能性があります。
E_OUTOFMEMORY
関数は、操作を実行するのに十分なメモリを割り当てませんでした。
PATHCCH_E_FILENAME_TOO_LONG
元のパスの一方または両方のサイズが PATHCCH_MAX_CCH を超えました。

注釈

pszPathInpszMore の両方が NULL または空の文字列を指している場合は、pszPathOut が指すバッファーに 1 つの円記号がコピーされます。

要件

要件
サポートされている最小のクライアント Windows 8 [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows Server 2012 [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー pathcch.h
Library Pathcch.lib

こちらもご覧ください

PathCchCanonicalize

PathCchCanonicalizeEx

PathCchCombine