如何編製應用程式本機資料的索引
[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]
您可以透過 Windows Search 服務 (WSS) 來編製本機儲存的應用程式資料的索引。
如果您的應用程式管理像是文件、郵件或媒體 (相片、音樂、影片等) 檔案,就有以結構化方式編製檔案的內容或屬性索引的中心需求,讓使用者能夠以快速有效的方式管理和擷取資料。您不需要在應用程式內建立索引子。如果您是應用程式開發人員,有一個方便安全的選項:您只要啟用 WSS 便能夠為應用程式資料編製索引。
使用 WSS 來編製應用程式資料索引的主要優點如下:
- WSS 支援為最常用文件類型的完整內容文字編製索引。此外,WSS 還支援為檔案屬性編製索引。
- 在內建的搜尋協定與檔案 API 內,可以輕鬆擷取並重複使用已編製索引的資料。
- Windows Search 重視檔案系統的安全性設定,這些設定可維護已編製索引的應用程式資料並將其安全地儲存在 Windows 索引子內。
Windows Search 可搭配所有 Windows 市集應用程式使用,包含使用 JavaScript、C#、C++ 與 VB.Net 撰寫的應用程式。
為您的應用程式啟用 Windows Search
要求 Windows Search 為應用程式資料編製索引並不困難。您需要在應用程式資料資料夾下建立名為 indexed 的資料夾,然後將需要編製索引的內容存放在其中。Windows Search 會將 indexed 資料夾視為如同在硬碟上的任何其他編製索引的位置一樣。 這個資料夾及其所有子資料夾中的檔案內容或檔案中繼資料 (屬性) 都將編製索引。以下是重要考量的清單:
- indexed 資料夾必須遵循下列指導方針:
- indexed 資料夾必須建立在 localFolder 根目錄底下。Windows Search 會對這個資料夾中的內容編製深度索引。以本機方式儲存於這個資料夾或其子資料夾的任何檔案 (包括子資料夾的所有層級),都會編製索引。 每個應用程式只允許一個 indexed 資料夾。
- 資料夾名稱 indexed 不區分大小寫。
- 雖然應用程式資料資料夾在 Windows 執行階段 API 中稱為 localFolder,但在實體硬碟上稱為 LocalState。如果您要存取這個資料夾以進行測試,請使用這個資料夾路徑: %user%\ AppData\Local\Packages\%packageName%\LocalState
- indexed 底下的資料夾結構可以很深,但是 Windows API 不允許檔案/資料夾的路徑長度超過 MAX_PATH (定義為 260 個字元)。因此您必須確定 indexed 資料夾底下的檔案或資料夾不會超過這個限制。如需 MAX_PATH 的詳細資訊,請參閱最大路徑長度限制。
- Windows Search 只會將本機儲存的資料編製索引。也就是說,只有以本機方式儲存在 indexed 資料夾或其子資料夾內的檔案才會編製索引。
- 安裝期間無法建立 indexed 資料夾。 該資料夾只能在應用程式執行時建立。視內容大小而定,Windows Search 需要較長時間才能完成,因此建議您在應用程式第一次執行時便建立 indexed 資料夾。建立 indexed 資料夾後,Windows Search 將會對應用程式內容自動編製索引。如果修改 (新增、刪除或更新) 檔案或子資料夾,Windows Search 還會自動重新排程編製索引程序,讓索引子隨著變更進行更新。請注意,Windows Search 會監視 CPU 使用率,以本身的排程最佳化索引編製程序。
安全性
WSS 重視 Windows 檔案系統的安全性設定,因此已編製索引的應用程式資料可安全地儲存在索引子中。特別的是:
- 當多個使用者帳戶位於同一部電腦時: Windows 市集應用程式會依據每個使用者帳戶進行安裝。如果同一部電腦上有多個使用者使用相同的應用程式,每個應用程式執行個體會在不同的實體路徑下建立本身的 indexed 資料夾。因此,除非授與某使用者存取該實體路徑,否則該使用者無法存取其他帳戶下已編製索引的資料。
- 在為多個應用程式的應用程式資料編製索引時: Windows 檔案系統不允許某個應用程式直接存取另一個應用程式的資料。因此,應用程式沒有另一個應用程式已編製索引資料的存取權。
擷取已編製索引的內容
為應用程式資料編製索引後,應用程式就可以透過檔案 API 擷取資料。