如何在應用程式本機資料上執行豐富的查詢
[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]
了解應用程式如何使用 Windows.Storage 命名空間中的檔案 API,針對應用程式本機儲存資料中的檔案執行多格式查詢。
Windows 市集應用程式可以使用檔案 API,對儲存在使用者媒體櫃中的內容執行多格式查詢。 這對於管理多格式內容 (例如文件、郵件或媒體) 的應用程式來說特別有價值。媒體可以包括相片、音樂及視訊。您可以使用這些查詢來新增功能,例如針對檔案內儲存的中繼資料進行的全文檢索搜尋和查詢式篩選。
您必須知道的事
技術
先決條件
- 您使用 Windows Search 服務針對應用程式本機儲存資料中的檔案編製索引。
指示
步驟 1: 針對應用程式資料啟用多格式查詢
為提供檔案的多格式查詢功能,您必須使用 Windows Search 服務編製這些檔案的索引。 一般而言,系統並不會對應用程式本機儲存資料中的檔案編製索引。這是因為當應用程式並不需要多格式查詢功能時,編製索引會造成不必要的效能負擔。
如果要針對應用程式資料內的檔案啟用索引功能,您必須在應用程式資料資料夾底下建立名為 indexed 的資料夾。然後,將您想要編製索引的內容儲存到該資料夾。Windows Search 服務會對這個 indexed 資料夾和所有子資料夾的檔案內容和中繼資料編製索引。
針對應用程式資料內的檔案啟用索引功能
規劃放置於 localFolder 底下的 indexed 資料夾。以下是關於 indexed 和 localFolder 的一些規則:
indexed 資料夾必須在 localFolder 根目錄底下建立。
Windows Search 服務會對這個資料夾內的檔案屬性和內容進行深度的索引編製。也就是說,Windows Search 服務會對以本機方式儲存於這個資料夾或其子資料夾 (包含所有層級的子資料夾) 內的任何檔案編製索引。
Windows Search 服務支援 HTML、PDF、XML 以及 RTF 檔案格式、Microsoft Office 檔案的檔案格式等等的全文檢索索引和搜尋。如需 Windows Search 服務篩選的相關資訊,請參閱 Windows 隨附的篩選條件處理常式。
每個應用程式只能有一個 indexed 資料夾。
資料夾名稱 indexed 不區分大小寫。
雖然應用程式資料資料夾在 Windows 執行階段 API 中稱為 localFolder,但在實體硬碟上稱為 LocalState。如果您要存取這個資料夾以進行測試,請使用這個資料夾路徑:
%user%\ AppData\Local\Packages\%packageName%\LocalState
indexed 資料夾底下的資料夾結構可以很深,但是 Windows API 不允許檔案或資料夾的路徑長度超過 MAX_PATH (定義為 260 個字元)。因此您必須確定 indexed 資料夾底下的檔案或資料夾不會超過這個限制。如需 MAX_PATH 的詳細資訊,請參閱最大路徑長度限制。
與 Windows Search 服務在其他位置編製索引時類似,只有以本機方式儲存的資料才能被編製成索引。也就是說,只有以本機方式儲存在 indexed 資料夾或其子資料夾內的檔案才能編製成索引。
在 localFolder 底下建立 indexed 資料夾。您無法在安裝期間建立 indexed 資料夾。只有在應用程式執行時,您才能建立該資料夾。以下程式碼片段說明如何在應用程式第一次執行時建立 indexed 資料夾:
Windows.Storage.ApplicationData.current.localFolder.createFolderAsync("indexed", Windows.Storage.CreationCollisionOption.openIfExists).then( function (result) { //your code here });
將您的檔案和資料夾儲存到這個 indexed 資料夾。您可以使用 StorageFolder 或 IStorageFolder 來儲存檔案和資料夾。接著,就能夠使用 Windows.Storage 命名空間中的檔案 API,對儲存在這個 indexed 資料夾中的所有檔案和資料夾執行多格式查詢。
步驟 2: 擷取已編製索引的內容
在 Windows Search 服務將應用程式資料編製索引後,應用程式就可以透過 Windows.Storage 命名空間中的檔案 API 擷取資料。例如,若要執行查詢,請使用 StorageFolder 的 CreateFileQuery 或 CreateFolderQuery,它代表 indexed 資料夾或 indexed 資料夾底下的任何子資料夾。