快速入門:以程式設計方式存取檔案 (HTML)

[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]

存取位於像是資料夾、媒體櫃、裝置或網路位置等位置中的檔案和資料夾。您也可以建構檔案和資料夾查詢來查詢位置中的檔案和資料夾。

先決條件

列舉位置中最上層的檔案和資料夾

  1. 取得代表位置的 StorageFolder。

    如果您要取得特定資料夾中內容的清單,必須先取得代表該位置的 StorageFolder 物件。

    資料夾列舉範例會示範如何取得圖片庫:

    var picturesLibrary = Windows.Storage.KnownFolders.picturesLibrary;
    

    在前面的範例中,我們使用 KnownFolders 來取得圖片庫 (當成 StorageFolder 物件)。您可以使用 KnownFolders 屬性來取得可代表許多使用者資源 (例如媒體櫃、裝置或網路位置) 的資料夾。

    重要  如果您要使用 KnownFolders 屬性存取媒體櫃、裝置或網路位置,則您應用程式的應用程式資訊清單就必須具備相對應的功能。若要深入了解檔案存取和功能,請參閱檔案存取和權限使用 Windows 執行階段來存取使用者資源

     

  2. 取得資料夾內容清單。

    資料夾列舉範例會示範如何取得圖片庫中的項目清單:

    picturesLibrary.getItemsAsync().then(function (items) {
    

    如前面的範例中所示,您可以呼叫 getItemsAsync() 來取得資料夾中所有內容的清單 (StorageFolder 物件)。如果您不需要所有的項目,可以呼叫 getItemsAsync(startIndex, maxItemsToRetrieve) 按照索引的範例取得資料夾內容。

    在資料夾上呼叫 getItemsAsync 方法時,要接收的項目清單僅限於這個資料夾中的檔案及子資料夾,而且不會包含這些子資料夾內的任何檔案和資料夾。

    如果需要資料夾內的檔案清單,可以呼叫 getFilesAsync 方法。如果需要資料夾的清單,可以呼叫 getFoldersAsync 方法。

    在 Get 作業後方使用 then,可定義使用收到之物件清單 (也就是前面範例中的 items) 的函式,然後執行您所需的其他工作。

  3. 使用您的清單。

    資料夾列舉範例會示範如何使用圖片庫中的 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 函式,但是您也可以執行數個其他工作。

    如需更多相關內容以及了解 outputHeaderoutput 函式的運作方式,請下載資料夾列舉範例

完成之後,您的程式碼應該看起來像這樣:


// 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); 
        } 
    }); 
});

查詢位置中的檔案

  1. 取得包含資料夾。

    如果您要取得特定資料夾中內容的清單,必須先取得資料夾。

    資料夾列舉範例會示範如何取得圖片庫:

    var picturesLibrary = Windows.Storage.KnownFolders.picturesLibrary;
    

    在前面的範例中,我們使用 KnownFolders 來取得圖片庫 (當成 StorageFolder 物件)。您可以使用 KnownFolders 屬性來取得可代表許多使用者資源 (例如媒體櫃、裝置或網路位置) 的資料夾。

    重要  如果您要使用 KnownFolders 屬性存取媒體櫃、裝置或網路位置,則您應用程式的應用程式資訊清單就必須具備相對應的功能。若要深入了解檔案存取和功能,請參閱檔案存取和權限使用 Windows 執行階段來存取使用者資源

     

  2. 建立資料夾查詢,按照您指定的方式整理檔案。

    當您從資料夾建立資料夾查詢時,這個資料夾中的檔案及它的子資料夾,會按照您的條件整理成群組。產生的群組是虛擬資料夾,具有檔案系統中資料夾的所有功能,讓您視需要在群組內取得檔案並進行處理。

    資料夾列舉範例會示範如何建立一個資料夾查詢,將圖片庫中的圖片按照拍攝或建立的月份進行分組:

    var query = picturesLibrary.createFolderQuery(Windows.Storage.Search.CommonFolderQuery.groupByMonth);
    

    如前面的範例中所示,您可以在資料夾上呼叫 createFolderQuery(query) 來建立資料夾查詢 (StorageFolderQueryResult 物件),按照您指定的 CommonFolderQuery 值,將這個資料夾的檔案及子資料夾整理到虛擬資料夾內。在這個範例中,我們選擇將 picturesLibrary 資料夾中的圖片檔案,按照圖片拍攝或建立的月份 (CommonFolderQuery.groupByMonth) 整理到虛擬資料夾內。

    您也可以呼叫 createFolderQuery()createFolderQueryWithOptions 來建立資料夾查詢。

  3. 從查詢取得虛擬資料夾清單。

    應用程式範例首頁FolderEnumeration 範例會使用 query 來取得虛擬資料夾清單:

    
    query.getFoldersAsync().then(function (monthList) {
        monthList.forEach(function (month) { 
    

    如前面的範例中所示,您可以在資料夾查詢中呼叫 getFoldersAsync() 來取得虛擬資料夾清單。使用 then 來定義處理這份清單的函式。在這個範例中,我們的查詢會傳回代表月份的虛擬資料夾清單 monthList,然後我們呼叫 monthList.forEach 並定義函式來處理每個 month 資料夾,以處理我們的清單。

  4. 取得虛擬資料夾中的檔案清單。

    資料夾列舉範例會示範如何使用 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 儲存和載入內容範例

若要深入了解如何透過檔案選擇器存取檔案,請參閱快速入門:使用檔案選擇器存取檔案

相關主題

存取資料和檔案

檔案存取和權限

快速入門:使用檔案選擇器存取檔案

快速入門:讀取和寫入檔案

檔案搜尋程式設計範例

資料夾列舉範例

檔案存取範例

使用 Blob 儲存和載入內容範例

參考

Windows.Storage.KnownFolders class

Windows.Storage.StorageFile class

Windows.Storage.StorageFolder class

Windows.Storage.StorageItemTypes enum

Windows.Storage.Search.CommonFolderQuery enum

Windows.Storage.Search.StorageFolderQueryResult class