GetFolderFromPathAsync函数访问被拒绝

本文关键字:拒绝 访问 函数 GetFolderFromPathAsync | 更新日期: 2023-09-27 18:18:09

我正在制作一个Windows 10通用应用程序,我希望用户选择一个文件夹来保存应用程序的文档文件。此文件夹的路径保存为ApplicationData.Current.RoamingSettings.Values。下面是代码:

On first Start:

var folderPicker = new FolderPicker { SuggestedStartLocation = PickerLocationId.ComputerFolder };
        StorageFolder folder = await folderPicker.PickSingleFolderAsync();
        StorageFolder homeFolder = await folder.CreateFolderAsync("App1 Data", CreationCollisionOption.OpenIfExists);
        var save = ApplicationData.Current.RoamingSettings.Values;
        save["HomeFolder"] = homeFolder.Path;

设置HomeFolder时:

string dir = save["HomeFolder"].ToString();
        try
        {
            StorageFolder homeFolder = await StorageFolder.GetFolderFromPathAsync(dir);
        }
        catch (Exception e)
        {
            Debug.WriteLine(e.ToString());
        }
第二个代码示例中抛出的异常是:

System.UnauthorizedAccessException: access denied (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

所以我的问题是,你如何正确使用GetFolderFromPathAsync函数?我检查了所有字符串的路径,它们都是正确的,甚至

StorageFolder.GetFolderFromPathAsync(storageFolder.Path);

是行不通的。你知道解决办法吗?

GetFolderFromPathAsync函数访问被拒绝

直接使用StorageFile而不是转换为路径

要存储从文件选择器返回的文件以供以后使用,将StorageFile保存在AccessCache类FutureAccessList或MostRecentlyUsedList中。该路径不包括打开文件所需的权限。StorageFile携带权限并授予对文件的访问权限。

我在我的博客文章中更详细地讨论了这一点跳过路径:坚持使用StorageFile