我的应用程序要求用户选择我将从中加载内容的单个文件(或整个文件夹)。我可以为此使用FileOpenPicker和FolderPicker类,它工作正常。问题是,如果用户关闭我的应用程序(或者它被暂停和终止),我将无法访问从选择器返回的StorageFile或StorageFolder。我不想让用户再次选择相同的文件或文件夹(那会很烦人)。
我曾考虑Path将文件或文件夹的 保存到我的设置中,然后稍后使用该broadFilesystemAccess功能访问该文件或文件夹,但这是 Microsoft 必须批准的受限功能。有没有更好的方法来重新打开用户之前在我的应用中打开的文件或文件夹?
该broadFilesystemAccess功能并不是解决此问题的好方法——即使将最小权限原则放在一边,即当您只需要访问一个文件时不应该要求访问所有用户的文件,这是用户的一种能力可以随时关闭,这意味着您将无法访问文件/文件夹。
相反,您应该使用FutureAccessList来存储然后检索用户授予您访问权限的任何文件或文件夹。此类还可以记住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...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
337 次 |
| 最近记录: |