PathCchCanonicalize 関数 (pathcch.h)
パス文字列を正規形式に変換します。
この関数は PathCchCanonicalizeEx とは異なり、長さMAX_PATHの最終パスに制限されます。
この関数は PathAllocCanonicalize とは異なり、呼び出し元は返される文字列のサイズを宣言する必要があります。これはスタックに格納されます。
この関数は PathCanonicalize とは異なり、"\"、"\?"、"\?\UNC" プレフィックスを持つパスを受け入れます。
構文
WINPATHCCHAPI HRESULT PathCchCanonicalize(
[out] PWSTR pszPathOut,
[in] size_t cchPathOut,
[in] PCWSTR pszPathIn
);
パラメーター
[out] pszPathOut
この関数が正常に返されると、正規化されたパス文字列を受け取るバッファーへのポインター。
[in] cchPathOut
pszPathOut が指すバッファーのサイズ (文字単位)。
[in] pszPathIn
元のパス文字列へのポインター。 この値が空の文字列を指している場合、または "." 要素と ".." 要素が削除されると空の文字列が生成される場合は、 pszPathOut が指すバッファーに 1 つの円記号がコピーされます。
戻り値
この関数が成功すると、 S_OKが返されます。 それ以外の場合は、次のような HRESULT コードが返されます。
リターン コード | 説明 |
---|---|
|
cchPathOut 値がPATHCCH_MAX_CCHより大きい。 |
|
パス セグメントが標準パス セグメントの長さの制限である 256 文字を超えています。 |
|
関数は、必要なサイズのバッファーを割り当てませんでした。 |
解説
この関数は、パスに埋め込まれた文字列 "." と "." に応答します。 ".." 文字列は、直前のパス セグメントを削除することを示します。 "." 文字列は、次のパス セグメントをスキップすることを示します。 パスのルート セグメントを削除できないことに注意してください。 パス セグメントよりも多くの ".." 文字列がある場合、関数は S_OKを返し、 pszPathOut が指すバッファーには単一の円記号 "\" が含まれます。
"" ワイルド カード文字の前にある場合を除き、すべての末尾のピリオドがパスから削除されます。その場合、'' 文字の後に 1 つのピリオドが保持されますが、それ以外のすべての末尾のピリオドは削除されます。
結果のパスがルート ドライブ ("x:") の場合、円記号が追加されます ("x:\")。
この関数はスラッシュ (/) をバック スラッシュ (\) に変換しません。 信頼されていない入力では、この関数自体を使用して、パスをサブパスまたは ID の他のパスと比較できる形式に変換することはできません。 その機能を必要とする呼び出し元は、この関数を使用する前にスラッシュに前方変換する必要があります。
次の例は、これらの文字列の効果を示しています。
元の文字列 | 正規化された文字列 |
---|---|
C:\name_1\.\name_2\..\name_3 | C:\name_1\name_3 |
C:\name_1\..\name_2\.\name_3 | C:\name_2\name_3 |
C:\name_1\name_2\.\name_3\..\name_4 | C:\name_1\name_2\name_4 |
C:\name_1\.\name_2\.\name_3\..\name_4\.. | C:\name_1\name_2 |
C:\name_1\*... | C:\name_1\*。 |
C:\。。 | C:\ |
要件
サポートされている最小のクライアント | Windows 8 [デスクトップ アプリ |UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2012 [デスクトップ アプリ |UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | pathcch.h |
Library | Pathcch.lib |