Как отслеживать недавно использовавшиеся файлы и папки (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

Отслеживайте файлы, к которым часто обращается пользователь, добавляя их в список последних использовавшихся файлов приложения. Платформа управляет списком mostRecentlyUsedList, сортируя элементы по времени последнего доступа к ним и удаляя самые старые элементы списка, имеющего ограничение в 25 элементов. Все приложения имеют собственный список mostRecentlyUsedList.

Обычно список последних использовавшихся элементов (MRU) в приложении применяется для отслеживания последних использованных файлов, но его можно также использовать для отслеживания папок. В списке последних использовавшихся элементов (MRU) можно хранить и файлы, и папки. Элементы хранятся в виде объектов IStorageItem. Это означает, что в список можно добавлять и объекты storageFile (представляющие файлы), и объекты storageFolder (представляющие папки).

Необходимые условия

Доступ к файлам и права доступа

Здесь поясняется, к каким файлам и расположениям приложение имеет доступ по умолчанию и каким способом приложение может получить доступ к дополнительным файлам и расположениям.

Краткое руководство: доступ к файлам с помощью средства выбора файлов

В разделе поясняется, как предоставить пользователям возможность выбора файлов для работы приложения. Выбранные файлы — это часто файлы, к которым пользователь возвращается снова и снова.

Связанные приверы

Пример доступа к файлу

Пример средства выбора файлов

Добавление выбранных файлов в список 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. Строка кода в функции обработки для добавления выбранного файла в список последних использовавшихся элементов выглядит примерно так:

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

    mostRecentlyUsedList.add перегружается. В примере используется add(fileOrFolder, metadata), поэтому можно сопоставить метаданные с файлом. Указание метаданных позволяет собрать дополнительную информацию, например назначение элемента. В этом примере мы получаем назначение файла, указав для метаданных значение "profile pic". Можно добавить файл в список последних использовавшихся элементов и без метаданных, вызвав add(fileOrFolder).

    В любое время при добавлении элемента в MRU (add) метод возвращает уникальную идентификационную строку, так называемый маркер, который используется для извлечения элемента. В примере этот маркер записывается в локальную переменную 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
        }
    });
    

Использование маркера для извлечения элемента из списка последних использовавшихся элементов

Для извлечения элемента из mostRecentlyUsedList необходим маркер для этого элемента. Для извлечения элемента следует использовать наиболее подходящий метод:

Например, получен маркер для первого элемента в списке последних использовавшихся элементов, который является файлом. После этого маркер используется для извлечения 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

Можно извлечь маркер для каждого элемента в списке, повторно обрабатывая записи, аналогичные следующим:

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
}

Эти записи — структуры accessListEntry, содержащие маркер и метаданные для элемента. Записи не содержат сам элемент и не могут использоваться для непосредственного извлечения связанного элемента.

Вместо этого можно использовать accessListEntry для извлечения маркера для связанного элемента, а затем извлечь элемент с помощью одного из методов, приведенных в предыдущем разделе Использование маркеров для извлечения элементов из списка последних использовавшихся элементов. В примере для каждой записи этот маркер сохраняется в локальной переменной mruToken, но больше никаких действий с ним не производится.

Хранящиеся в accessListEntry метаданные — это строка с дополнительными данными об элементе. Эти данные можно указать при добавлении элемента в mostRecentlyUsedList.

Замечания

Удаление элементов из MRU при достижении ограничения в 25 элементов

При достижении ограничения списка в 25 элементов и попытке добавить новый элемент система Windows автоматически удаляет самый старый элемент (элемент, к которому не было обращений самое продолжительное время). Поэтому нет необходимости удалять элемент перед добавлением нового, даже если в списке содержится максимальное число элементов (25).

Сохранение доступа к файлам и папкам, превышающим ограничение в 25 элементов

Кроме списка последних использовавшихся в приложении есть также список будущего доступа (futureAccessList), который можно использовать для обслуживания доступа приложения к файлам и папкам, к которым нельзя получить доступ иным способом.

Если пользователь выбирает файл или папку, необходимо предусмотреть добавление этого элемента в оба списка: mostRecentlyUsedList и futureAccessList. Добавление файла или папки в futureAccessList помогает обеспечить доступ приложения к элементу, даже если пользователь редко к нему обращается.

Работа с futureAccessList отличается от работы со списком последних использовавшихся элементов парой ключевых моментов:

  • В futureAccessList может содержаться до 1000 элементов.
  • Платформа не управляет списком futureAccessList в отличие от списка последних использовавшихся элементов. Если достигнут предел в 1000 элементов, то перед добавлением нового элемента необходимо удалить какой-либо старый из списка. Вы можете сделать это, вызвав метод remove.

По умолчанию все приложения имеют собственные mostRecentlyUsedList и futureAccessList.