我正在制作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());
        }


在第二个代码示例中引发的Exception是:

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

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

StorageFolder.GetFolderFromPathAsync(storageFolder.Path);

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

最佳答案

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

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

我在博客条目Skip the path: stick to the StorageFile中对此进行了更详细的讨论。

08-04 19:56