Как получить доступ к файлам или папкам, которые пользователь выбрал в предыдущем сеансе моего приложения UWP?

Мое приложение просит пользователя выбрать один файл (или целую папку), из которого я буду загружать контент. Я могу использовать для этого классы FileOpenPicker и FolderPicker, и это прекрасно работает. Проблема в том, что если пользователь закроет мое приложение (или оно будет приостановлено и завершено), я потеряю доступ к StorageFile или StorageFolder, которые были возвращены из средства выбора. Я не хочу просить пользователя снова выбрать тот же файл или папку (это будет раздражать).

Я решил сохранить Path файла или папки в своих настройках, а затем использовать возможность broadFilesystemAccess для доступа к файлу или папке позже, но это ограниченная возможность, которую Microsoft должна одобрить. Есть ли лучший способ повторно открыть файлы или папки, которые пользователь ранее открывал в моем приложении?


uwp
person Peter Torr - MSFT    schedule 07.09.2018    source источник


Ответы (1)


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

Вместо этого для хранить, а затем извлекать любые файлы или папки, к которым пользователь предоставил вам доступ. Этот класс также может запоминать файлы, сохраненные с помощью FileSavePicker или открытые с помощью активации File (например, когда пользователь дважды щелкает файл в проводнике Windows) или с помощью любого другого механизма, который предоставляет вам IStorageItem на диске.

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

// After user has picked file or folder, get the token and then
// store it in your local settings however you want.
var token = StorageApplicationPermissions.FutureAccessList.Add(file);
SaveLastFileUserWasWorkingOnToSettings(token);

// -----

// When your app is launched again, look up the last-opened file in 
// settings and then try to retrieve it.
var token = GetLastFileUserWasWorkingOnFromSettings();
if (StorageApplicationPermissions.FutureAccessList.ContainsItem(token))
{
  var file = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(token);
  // use the file...
}
person Peter Torr - MSFT    schedule 07.09.2018