如何追蹤最近使用的檔案和資料夾 (HTML)

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

將使用者經常存取的檔案新增到您應用程式的最近使用清單中,即可追蹤檔案。平台會根據項目上次被存取的時間來排序項目,並在達到清單的 25 個項目數限制時移除最舊的項目,來為您管理 mostRecentlyUsedList。所有應用程式都有自己的 mostRecentlyUsedList

通常,您應用程式的最近使用清單 (MRU) 最適合用來追蹤使用者最近使用的檔案,但是 MRU 也可以用來追蹤資料夾。您可以將檔案和資料夾都儲存在應用程式的最近使用清單 (MRU) 中。項目會儲存為 IStorageItem 物件,這表示 storageFile 物件 (代表檔案) 和 storageFolder 物件 (代表資料夾) 都可以新增到 MRU 中。

先決條件

檔案存取和權限

說明應用程式預設可以存取的檔案和位置,以及應用程式可以取得其他檔案和位置存取權的方式。

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

說明如何讓使用者挑選要讓您應用程式操作的檔案。挑選的檔案經常是使用者會一再反覆使用的相同檔案。

相關範例

檔案存取範例

檔案選擇器範例

將挑選的檔案新增到 MRU

使用者挑選的檔案經常是他們會一再反覆使用的檔案。因此,如果使用者挑選某個檔案,您應該強烈考量將該檔案新增到應用程式的最近使用清單 (MRU) 中。只要按照下列步驟,您就可以在檔案被挑選時輕易地將挑選的檔案立即新增到 MRU 中。

  1. 找出您應用程式中可讓使用者挑選檔案和/或資料夾的程式碼。

    如果您不確定這個程式碼在哪裡,或是不知道如何使用檔案選擇器存取檔案,請先閱讀快速入門:使用檔案選擇器存取檔案,再繼續作業。

    例如,如果您讓使用者挑選單一檔案,則程式碼會看起來像這樣:

    var openPicker = new Windows.Storage.Pickers.FileOpenPicker();
    openPicker.viewMode = Windows.Storage.Pickers.PickerViewMode.thumbnail;
    openPicker.suggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.picturesLibrary;
    openPicker.fileTypeFilter.replaceAll([".png", ".jpg", ".jpeg"]);
    
    // Open the picker for the user to pick a file
    openPicker.pickSingleFileAsync().done(function (pickedFile) {
        if (pickedFile) {
            // Process picked file       
        } else {
            // Canceled; no file was picked
        }
    });
    

    傳回非同步呼叫 (這個範例中的 pickSingleFileAsync) 時,使用者挑選的檔案會被傳回成 storageFile。我們使用 done 將挑選的檔案 (這個範例中的 pickedFile) 傳送到處理函式 (這個範例中的匿名函式),將檔案新增到 mostRecentlyUsedList

    如果您讓使用者挑選資料夾,而不是檔案,則您的程式碼會使用 pickSingleFolderAsync,而挑選的資料夾會被傳回成 storageFolder

  2. 使用類似下列的一行程式碼,將挑選的檔案新增到處理函式中的最近使用清單 (MRU):

    
            var mruToken = Windows.Storage.AccessCache.StorageApplicationPermissions.mostRecentlyUsedList.add(pickedFile, pickedFile.name);
    

    mostRecentlyUsedList.add 已超載。在這個範例中,我們使用 add(fileOrFolder, metadata),以便將中繼資料與檔案建立關聯。設定中繼資料可以讓您擷取額外的資訊,例如項目的用途。在這個範例中,我們藉由將中繼資料設定為 "設定檔圖片" 來擷取檔案的用途。 您也可以藉由呼叫 add(fileOrFolder),在沒有中繼資料的情況下,將檔案新增到 MRU 中。

    每當您將一個項目 add 到 MRU 中時,該方法都會傳回唯一的辨識字串 (稱為權杖),可用來擷取該項目。在這個範例中,我們會擷取 mruToken 區域變數中的這個權杖,但除此之外並不對它做任何其他動作。

    秘訣   由於您需要使用權杖從 MRU 擷取項目,因此您應該考慮將權杖儲存到應用程式資料中供以後使用。例如,如果您的應用程式將設定檔圖片新增到 MRU 中 (如同我們在範例中所做的),您可能會想要將權杖儲存到您用來追蹤使用者設定檔圖片的應用程式資料清單中。您可以在管理應用程式資料中進一步了解應用程式資料的相關資訊。

     

    您的處理函式現在應該看起來像這樣:

    openPicker.pickSingleFileAsync().done(function (pickedFile) {
        if (pickedFile) {
            // Add picked file to MRU
            var mruToken = Windows.Storage.AccessCache.StorageApplicationPermissions.mostRecentlyUsedList.add(pickedFile, pickedFile.name);
    
            // Continue processing picked file      
        } else {
            // Canceled; no file was picked
        }
    });
    

使用權杖從 MRU 擷取項目

若要從 mostRecentlyUsedList 擷取項目,您必須要有該項目的權杖。您應該使用最適用於所要擷取之項目的擷取方法:

例如,我們取得 MRU 中第一個項目 (一個檔案) 的權杖,然後透過下列程式碼,使用權杖擷取代表該檔案的 storageFile

var mruFirstToken = Windows.Storage.AccessCache.StorageApplicationPermissions.mostRecentlyUsedList.entries.first.token;
Windows.Storage.AccessCache.StorageApplicationPermissions.mostRecentlyUsedList.getFileAsync(mruFirstToken).done(
    function (retrievedFile) {
        // Process retrieved file
    },
    function (error) {
        // Handle errors 
    }
);

在這個範例中,我們知道第一個項目是檔案,因為我們只新增了一個檔案到 mostRecentlyUsedList 中。

擷取 MRU 中所有項目的權杖

您可以按照下列方式重複處理項目 (entry) 來擷取清單中每個項目 (item) 的權杖:

var mruEntries = Windows.Storage.AccessCache.StorageApplicationPermissions.mostRecentlyUsedList.entries;
if (mruEntries.size > 0) {
    mruEntries.forEach(function (entry) {
        var mruToken = entry.token;
        // Continue processing the MRU entry
    });
} else {
    // Handle empty MRU
}

這些項目 (entry) 是包含某個項目 (item) 之權杖和中繼資料的 accessListEntry 結構。項目 (entry) 並不包含項目 (item) 本身,不能直接用來擷取相關的項目 (item)。

您可以改為使用 accessListEntry 來擷取相關項目的權杖,然後使用前一節使用權杖從 MRU 擷取項目中所列的其中一種方法來擷取項目。在這個範例中,我們會擷取 mruToken 區域變數中每個項目的權杖,但除此之外並不對它做任何其他動作。

儲存在 accessListEntry 中的中繼資料是一個含有項目其他相關資訊的字串。 您可以在將項目新增到 mostRecentlyUsedList 時指定該資訊。

備註

當達到 25 個項目數限制時,從 MRU 移除項目

當已達到 MRU 的 25 個項目數限制,而您嘗試新增項目時,Windows 會自動移除最舊的項目 (上次存取時間在最久之前的項目)。因此,即使 MRU 所含的項目數已達上限 (25),您也不需要在新增項目之前先移除一個項目。

保留超出 25 個項目數限制的檔案和資料夾存取權

除了最近使用清單之外,您的應用程式也有一個未來存取清單 (futureAccessList),可供您用來維護應用程式對可能無法以其他方式存取之檔案和資料夾的存取權。

當使用者挑選檔案或資料夾時,您應該考慮將該項目同時新增到應用程式的 mostRecentlyUsedListfutureAccessList 中。將檔案或資料夾新增到 futureAccessList 可協助確保即使使用者不常使用該項目,您的應用程式仍然能夠保有對該項目的存取權。

使用 futureAccessList 與使用 MRU 的主要不同點在於:

  • futureAccessList 最多可以有 1000 個項目。
  • 與 MRU 不同,平台並不會為您管理 futureAccessList。當達到 1000 個項目數限制時,您必須先從清單移除一個項目,才能再新增項目。您可以藉由使用 remove 方法來執行這個動作。

所有應用程式預設都有自己的 mostRecentlyUsedListfutureAccessList