C# GetFolderFromPathAsync函数访问被拒绝

C# GetFolderFromPathAsync函数访问被拒绝,c#,uwp,C#,Uwp,我正在制作一个Windows 10通用应用程序,我希望用户选择一个文件夹来保存应用程序的文档文件。此文件夹的路径保存到ApplicationData.Current.RoamingSettings.Values。 代码如下: 首次启动时: var folderPicker = new FolderPicker { SuggestedStartLocation = PickerLocationId.ComputerFolder }; StorageFolder folder = a

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

首次启动时:

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(来自HRESULT:0x80070005(E_ACCESSDENIED)的异常)

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

StorageFolder.GetFolderFromPathAsync(StorageFolder.Path)

不起作用。
您知道解决方案吗?

直接使用存储文件,而不是转换为路径

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


我在我的博客文章中更详细地讨论了这一点

重启应用程序后,我是否能够获取此FutureAccessList的项目?是的,这就是重点。如果它只在应用程序的一次运行中起作用,那么首先你就不需要FutureAccessList;你只需要继续使用StorageFile。你好,Rob,我读了你的博客文章,对此我感同身受——我理解这种方法的原因,特权等等。但万一我需要存储超过1000个文件的位置,该怎么办?假设我有一个在手机上显示图片的应用程序,某种数据库,我需要访问用户选择的文件,我不想将用户限制为1000个文件。对驻留在手机上的PicturesLibrary返回的文件使用路径方法安全吗?对于包含大量文件的数据库,最佳做法是什么?更糟糕的是,您持有的每个StorageFile或StorageFolder似乎都会导致RuntimeBroker.exe分配大约60k。没有迹象表明微软对此采取了任何行动。