Как отслеживать недавно использовавшиеся файлы и папки (HTML)
[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]
Отслеживайте файлы, к которым часто обращается пользователь, добавляя их в список последних использовавшихся файлов приложения. Платформа управляет списком mostRecentlyUsedList, сортируя элементы по времени последнего доступа к ним и удаляя самые старые элементы списка, имеющего ограничение в 25 элементов. Все приложения имеют собственный список mostRecentlyUsedList.
Обычно список последних использовавшихся элементов (MRU) в приложении применяется для отслеживания последних использованных файлов, но его можно также использовать для отслеживания папок. В списке последних использовавшихся элементов (MRU) можно хранить и файлы, и папки. Элементы хранятся в виде объектов IStorageItem. Это означает, что в список можно добавлять и объекты storageFile (представляющие файлы), и объекты storageFolder (представляющие папки).
Необходимые условия
Доступ к файлам и права доступа
Здесь поясняется, к каким файлам и расположениям приложение имеет доступ по умолчанию и каким способом приложение может получить доступ к дополнительным файлам и расположениям.
Краткое руководство: доступ к файлам с помощью средства выбора файлов
В разделе поясняется, как предоставить пользователям возможность выбора файлов для работы приложения. Выбранные файлы — это часто файлы, к которым пользователь возвращается снова и снова.
Связанные приверы
Добавление выбранных файлов в список MRU
Часто файлы, выбираемые пользователем, — это файлы, к которым этот пользователь возвращается снова и снова. По этой причине, если пользователь выбрал файл, необходимо обязательно предусмотреть добавление этого файла в список последних по времени использования файлов (MRU). Для простого добавления выбранных файлов в список MRU сразу после их выбора выполните следующие действия.
Найдите в приложении код, позволяющий пользователю выбирать файлы и/или папки.
Если вы не знаете, где находится этот код, либо вам неизвестно, как использовать функцию выбора файлов для доступа к файлам, перед продолжением ознакомьтесь с кратким руководством по доступу к файлам с помощью средства выбора файлов.
Например, для выбора одного файла фрагмент кода должен выглядеть примерно так:
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.
Строка кода в функции обработки для добавления выбранного файла в список последних использовавшихся элементов выглядит примерно так:
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 с помощью getFileAsync.
- Папка извлекается как storageFolder с помощью getFolderAsync.
- Общий IStorageItem, который может представлять как файл, так и папку, извлекается с помощью getItemAsync.
Например, получен маркер для первого элемента в списке последних использовавшихся элементов, который является файлом. После этого маркер используется для извлечения 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.