Windows Vista 引進了新的記憶體案例和新的使用者配置檔命名空間。 為了解決這些新因素,已取代以 CSIDL 值參照標準資料夾的較舊系統。 從 Windows Vista 起,這些資料夾是由一組稱為已知資料夾識別元的新 GUID 值所參考。
已知資料夾系統提供下列優點:
- 獨立軟體供應商 (ISV) 可以使用自己的一組已知資料夾標識碼來擴充。 他們可以定義資料夾、提供識別碼,並將其註冊到系統。 無法擴充 CSIDL 值。
- 可以列舉系統上的所有已知資料夾。 沒有 API 針對 CSIDL 值提供此功能。 如需詳細資訊,請參閱 IKnownFolderManager::GetFolderIds。
- 由 ISV 新增的已知資料夾可加入自訂屬性,藉此說明其用途和預定用途。
- 許多已知資料夾都可以重新導向至新的位置,包括網路位置。 在 CSIDL 系統下,只能重新導向 [我的文件] 資料夾。
- 已知資料夾可以有自定義處理程式,可在建立或刪除期間使用。
基於相容性考量,仍支援 CSIDL 系統以及使用 CSIDL 值的 API。 不過,不建議在任何新的開發中使用它們。
Important
對於新程式碼,請始終使用 SHGetKnownFolderPath 並設定 KNOWNFOLDERID 常數。 舊有 的 SHGetFolderPath 與 CSIDL 值已棄用,不應用於新應用程式。
呼叫 SHGetKnownFolderPath 時:
- 使用此函式 前必須 呼叫 CoInitializeEx (COM 必須在呼叫執行緒上初始化)。
- 完成後,您必須使用 CoTaskMemFree 釋放傳回的字串。 未做到這點會導致記憶體洩漏。
- 對於 .NET 應用程式,請使用 Environment.GetFolderPath 或 Windows.Storage.KnownFolders(WinRT),而不要直接以 P/Invoke 呼叫 shell 函式。
下列主題討論已知資料夾系統的詳細資料。
下列參考頁面說明 Win32 已知資料夾函式,可用來擷取已知資料夾的位置,或將它們重新導向至新位置。 這些函式會取代舊的 Win32 函式。 系統會提供新的函式來提供對等行為給舊函式,但每個新函式也會由元件物件模型 (COM) API 複製。
| 新功能 | 取代 | COM 對等項 |
|---|---|---|
| SHGetKnownFolderPath | SHGetFolderPath | IKnownFolder::GetPath |
| SHGetKnownFolderIDList | SHGetFolderLocation | IKnownFolder::GetIDList |
| SHSetKnownFolderPath | SHSetFolderPath | IKnownFolder::SetPath |
下列參考頁面說明 COM 已知資料夾 API,其提供上述 Win32 API 的所有功能,以及新增列舉所有已知資料夾、存取已知資料夾屬性,以及擴充已知資料夾的標準集合的能力。
示範已知資料夾 API 的C++範例包含在 Windows 軟體開發工具套件 (SDK) 中。 在計算機上安裝 Windows SDK 之後,您可以在 \%ProgramFiles%\Microsoft SDK\Windows\v6.0\Samples\WinUI\Shell\AppPlatform\KnownFolders 下找到此範例。