快速入門:以程式設計方式存取檔案 (HTML)
[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]
存取位於像是資料夾、媒體櫃、裝置或網路位置等位置中的檔案和資料夾。您也可以建構檔案和資料夾查詢來查詢位置中的檔案和資料夾。
先決條件
了解使用 JavaScript 之 Windows 執行階段應用程式的非同步程式設計
您可以在快速入門:在 JavaScript 中使用 Promise 了解如何撰寫非同步應用程式。
位置的存取權限
例如,這些範例中的程式碼需要圖片庫功能,但是您的位置可能需要其他功能或完全不需要功能。若要深入了解,請參閱檔案存取和權限。若要深入了解如何使用檔案選擇器來存取檔案和資料夾,請參閱快速入門:使用檔案選擇器存取檔案。
列舉位置中最上層的檔案和資料夾
取得代表位置的 StorageFolder。
如果您要取得特定資料夾中內容的清單,必須先取得代表該位置的 StorageFolder 物件。
資料夾列舉範例會示範如何取得圖片庫:
var picturesLibrary = Windows.Storage.KnownFolders.picturesLibrary;
在前面的範例中,我們使用 KnownFolders 來取得圖片庫 (當成 StorageFolder 物件)。您可以使用 KnownFolders 屬性來取得可代表許多使用者資源 (例如媒體櫃、裝置或網路位置) 的資料夾。
重要 如果您要使用 KnownFolders 屬性存取媒體櫃、裝置或網路位置,則您應用程式的應用程式資訊清單就必須具備相對應的功能。若要深入了解檔案存取和功能,請參閱檔案存取和權限和使用 Windows 執行階段來存取使用者資源。
取得資料夾內容清單。
資料夾列舉範例會示範如何取得圖片庫中的項目清單:
picturesLibrary.getItemsAsync().then(function (items) {
如前面的範例中所示,您可以呼叫 getItemsAsync() 來取得資料夾中所有內容的清單 (StorageFolder 物件)。如果您不需要所有的項目,可以呼叫 getItemsAsync(startIndex, maxItemsToRetrieve) 按照索引的範例取得資料夾內容。
在資料夾上呼叫 getItemsAsync 方法時,要接收的項目清單僅限於這個資料夾中的檔案及子資料夾,而且不會包含這些子資料夾內的任何檔案和資料夾。
如果需要資料夾內的檔案清單,可以呼叫 getFilesAsync 方法。如果需要資料夾的清單,可以呼叫 getFoldersAsync 方法。
在 Get 作業後方使用 then,可定義使用收到之物件清單 (也就是前面範例中的
items
) 的函式,然後執行您所需的其他工作。使用您的清單。
資料夾列舉範例會示範如何使用圖片庫中的
items
清單來執行其他的工作:outputHeader(picturesLibrary.name, items.size); items.forEach(function (item) { if (item.isOfType(Windows.Storage.StorageItemTypes.folder)) { output(id(picturesLibrary.name), item.name + "\\"); } else { output(id(picturesLibrary.name), item.fileName); } });
前面的範例會將資料夾的 name 和清單的
size
傳遞到 Helper 函式,將這些資訊顯示給使用者。您也可以逐一查看項目清單來執行其他工作,如前面的範例中所示。您可以在項目清單上呼叫
forEach
,逐一查看清單中的項目。傳遞到forEach
的函式應將清單項目當作引數,在清單中的每個item
執行。在每個
item
上個別呼叫方法,可以執行進一步處理。在前面的範例中,我們將檔案和資料夾兩者的 isOfType 方法結果與 StorageItemTypes 列舉值相比較,判斷item
是資料夾 (StorageFolder 物件) 或是檔案 (StorageFile 物件)。我們使用這個比較結果,將項目的不同資訊傳遞到output
Helper 函式,但是您也可以執行數個其他工作。如需更多相關內容以及了解
outputHeader
與output
函式的運作方式,請下載資料夾列舉範例。
完成之後,您的程式碼應該看起來像這樣:
// Get folder
var picturesLibrary = Windows.Storage.KnownFolders.picturesLibrary;
// Get folder contents
picturesLibrary.getItemsAsync().then(function (items) {
// Then perform tasks with the list of files and folders that was retrieved
// For example, display name of containing folder and count of items in folder
outputHeader(picturesLibrary.name, items.size);
// For example, display info for each item
items.forEach(function (item) {
if (item.isOfType(Windows.Storage.StorageItemTypes.folder)) {
output(id(picturesLibrary.name), item.name + "\\");
}
else {
output(id(picturesLibrary.name), item.fileName);
}
});
});
查詢位置中的檔案
取得包含資料夾。
如果您要取得特定資料夾中內容的清單,必須先取得資料夾。
資料夾列舉範例會示範如何取得圖片庫:
var picturesLibrary = Windows.Storage.KnownFolders.picturesLibrary;
在前面的範例中,我們使用 KnownFolders 來取得圖片庫 (當成 StorageFolder 物件)。您可以使用 KnownFolders 屬性來取得可代表許多使用者資源 (例如媒體櫃、裝置或網路位置) 的資料夾。
重要 如果您要使用 KnownFolders 屬性存取媒體櫃、裝置或網路位置,則您應用程式的應用程式資訊清單就必須具備相對應的功能。若要深入了解檔案存取和功能,請參閱檔案存取和權限和使用 Windows 執行階段來存取使用者資源。
建立資料夾查詢,按照您指定的方式整理檔案。
當您從資料夾建立資料夾查詢時,這個資料夾中的檔案及它的子資料夾,會按照您的條件整理成群組。產生的群組是虛擬資料夾,具有檔案系統中資料夾的所有功能,讓您視需要在群組內取得檔案並進行處理。
資料夾列舉範例會示範如何建立一個資料夾查詢,將圖片庫中的圖片按照拍攝或建立的月份進行分組:
var query = picturesLibrary.createFolderQuery(Windows.Storage.Search.CommonFolderQuery.groupByMonth);
如前面的範例中所示,您可以在資料夾上呼叫 createFolderQuery(query) 來建立資料夾查詢 (StorageFolderQueryResult 物件),按照您指定的 CommonFolderQuery 值,將這個資料夾的檔案及子資料夾整理到虛擬資料夾內。在這個範例中,我們選擇將
picturesLibrary
資料夾中的圖片檔案,按照圖片拍攝或建立的月份 (CommonFolderQuery.groupByMonth) 整理到虛擬資料夾內。您也可以呼叫 createFolderQuery() 或 createFolderQueryWithOptions 來建立資料夾查詢。
從查詢取得虛擬資料夾清單。
應用程式範例首頁的 FolderEnumeration 範例會使用
query
來取得虛擬資料夾清單:query.getFoldersAsync().then(function (monthList) { monthList.forEach(function (month) {
如前面的範例中所示,您可以在資料夾查詢中呼叫 getFoldersAsync() 來取得虛擬資料夾清單。使用 then 來定義處理這份清單的函式。在這個範例中,我們的查詢會傳回代表月份的虛擬資料夾清單
monthList
,然後我們呼叫monthList.forEach
並定義函式來處理每個month
資料夾,以處理我們的清單。取得虛擬資料夾中的檔案清單。
資料夾列舉範例會示範如何使用
month
資料夾,取得我們在該月份拍攝或建立的圖片清單:var tempMonthName = month.name; month.getFilesAsync().then(function (files) {
秘訣 您可能需要儲存虛擬資料夾 (
month
) 的資訊以便稍後使用。在前面的範例中,我們將虛擬資料夾的名稱 (month
.name) 儲存到tempMonthName
,這樣當我們處理圖片清單 (files
) 時就可以使用。使用 then 定義函式,以處理接收的檔案清單。
完成之後,您的程式碼應該看起來像這樣:
// Get folder
var picturesLibrary = Windows.Storage.KnownFolders.picturesLibrary;
// Create query
var query = picturesLibrary.createFolderQuery(Windows.Storage.Search.CommonFolderQuery.groupByMonth);
// Get virtual folders from query
query.getFoldersAsync().then(function (monthList) {
monthList.forEach(function (month) {
var tempMonthName = month.name;
// Get files from virtual folder
month.getFilesAsync().then(function (files) {
// Then perform tasks with retrieved files
});
});
});
摘要與後續步驟
若要深入了解讀取和寫入檔案,請參閱快速入門:讀取和寫入檔案以及檔案存取範例。若要深入了解使用影像檔案,請參閱如何選取和顯示影像、如何解碼影像以及使用 Blob 儲存和載入內容範例。
若要深入了解如何透過檔案選擇器存取檔案,請參閱快速入門:使用檔案選擇器存取檔案。
相關主題
參考
Windows.Storage.KnownFolders class
Windows.Storage.StorageFile class
Windows.Storage.StorageFolder class
Windows.Storage.StorageItemTypes enum