Поделиться через


Отслеживание недавно используемых файлов и папок

Основные API

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

MRU приложения представлен классом StorageItemMostRecentlyUsedList, который вы получаете из статического свойства StorageApplicationPermissions.MostRecentlyUsedList. Элементы MRU хранятся как объекты IStorageItem, поэтому в MRU можно добавить как объекты StorageFile (представляющие файлы), так и объекты StorageFolder (представляющие папки).

Замечание

 Для полных примеров см. пример для средства выбора файлов и пример для доступа к файлам.

Предпосылки

Добавление выбранного файла в MRU

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

    Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();
    
    var mru = Windows.Storage.AccessCache.StorageApplicationPermissions.MostRecentlyUsedList;
    string mruToken = mru.Add(file, "profile pic");
    

    StorageItemMostRecentlyUsedList.Add перегружен. В примере мы используем Add(IStorageItem, String), чтобы можно было связать метаданные с файлом. Настройка метаданных позволяет записать назначение элемента, например "фото профиля". Вы также можете добавить файл в MRU без метаданных, вызвав Add(IStorageItem). При добавлении элемента в MRU метод возвращает уникально определяющую строку, которая называется маркером, который используется для извлечения элемента.

Подсказка

Для получения элемента из MRU потребуется токен, поэтому сохраните его в постоянном хранилище. Дополнительные сведения о данных приложения см. в разделе "Управление данными приложения".

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

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

Вот как вернуть файл, который мы только что добавили.

StorageFile retrievedFile = await mru.GetFileAsync(mruToken);

Вот как выполнить итерацию всех записей, чтобы получить маркеры, а затем элементы.

foreach (Windows.Storage.AccessCache.AccessListEntry entry in mru.Entries)
{
    string mruToken = entry.Token;
    string mruMetadata = entry.Metadata;
    Windows.Storage.IStorageItem item = await mru.GetItemAsync(mruToken);
    // The type of item will tell you whether it's a file or a folder.
}

AccessListEntryView позволяет выполнять итерацию записей в MRU. Эти записи представляют собой структуры AccessListEntry , содержащие маркер и метаданные для элемента.

Удаление элементов из списка MRU, когда он переполнен

Когда достигается ограничение в 25 элементов для MRU и вы пытаетесь добавить новый элемент, автоматически удаляется элемент, к которому обращались дольше всех. Таким образом, вам никогда не нужно удалять элемент перед добавлением нового элемента.

Список будущего доступа

Помимо MRU, ваше приложение также имеет список будущего доступа. Выбрав файлы и папки, пользователь предоставляет приложению разрешение на доступ к элементам, которые могут быть недоступны в противном случае. Если вы добавите эти элементы в список будущих доступа, вы сохраните это разрешение, когда приложение хочет получить доступ к этим элементам позже. Список будущих доступов приложения представлен классом StorageItemAccessList, который вы получаете из статического свойства StorageApplicationPermissions.FutureAccessList.

Когда пользователь выбирает элемент, рассмотрите возможность добавления его в список для будущего доступа, а также в список MRU.

  • FutureAccessList может содержать до 1000 элементов. Помните: он может хранить папки, а также файлы, поэтому это много папок.
  • Платформа никогда не удаляет элементы из FutureAccessList за вас. Когда вы достигнете лимита в 1000 элементов, вы не сможете добавить новый, пока не освободите место с помощью метода Remove.