共用方式為


PathCchCanonicalize 函式 (pathcch.h)

將路徑字串轉換成標準格式。

此函式與 PathCchCanonicalizeEx 不同,因為您限制為長度為MAX_PATH的最終路徑。

此函式與 PathAllocCanonicalize 不同,因為呼叫端必須宣告儲存在堆疊上的傳回字串大小。

此函式與 PathCanonicalize 不同,因為它接受具有 「\」、「\?」 和 「\?\UNC」 前置詞的路徑。

注意 此函式 PathCchCanonicalizeExPathAllocCanonicalize 應該用來取代 PathCanonicalize ,以防止緩衝區溢位的可能性。

語法

WINPATHCCHAPI HRESULT PathCchCanonicalize(
  [out] PWSTR  pszPathOut,
  [in]  size_t cchPathOut,
  [in]  PCWSTR pszPathIn
);

參數

[out] pszPathOut

緩衝區的指標,當此函式成功傳回時,會收到標準路徑字串。

[in] cchPathOut

pszPathOut所指向的緩衝區大小,以字元為單位。

[in] pszPathIn

原始路徑字串的指標。 如果此值指向空字串,或一旦移除 「.」 和 「..」 元素,就會將單一反斜線複製到 pszPathOut指向的緩衝區。

傳回值

如果此函式成功,則會傳回 S_OK。 否則,它會傳回 HRESULT 程式碼,包括下列專案。

傳回碼 描述
E_INVALIDARG
cchPathOut值大於PATHCCH_MAX_CCH
PATHCCH_E_FILENAME_TOO_LONG
路徑區段超過標準路徑區段長度限制 256 個字元。
E_OUTOFMEMORY
函式無法配置必要大小的緩衝區。

備註

此函式會回應路徑中內嵌的字串 「.」 和 「..」。 「..」 字串表示移除緊接在路徑區段前面的 。 「.」 字串表示略過下一個路徑區段。 請注意,無法移除路徑的根區段。 如果 「..」 字串超過路徑區段,函式會傳回S_OK, 而 pszPathOut 指向的緩衝區包含單一反斜線 「\」。

所有尾端句點都會從路徑中移除,但前面加上 「」 萬用字元時除外。在此情況下,會在 '' 字元之後保留單一句號,但會移除所有其他尾端句點。

如果產生的路徑是根磁片磁碟機 (「x:」) ,則會附加反斜線 (「x:\」) 。

此函式不會將 /) (斜線轉換成反斜線 (\) 。 使用不受信任的輸入時,此函式本身無法用來將路徑轉換成可與其他子路徑或身分識別路徑比較的表單。 需要該功能的呼叫端應該先將正斜線轉換成反斜線,再使用此函式。

下列範例顯示這些字串的效果。

原始字串 標準字串
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
程式庫 Pathcch.lib

另請參閱

PathCchCanonicalizeEx