【问题标题】:GetFolderFromPathAsync function access deniedGetFolderFromPathAsync 函数访问被拒绝
【发布时间】:2015-10-19 00:42:42
【问题描述】:

我正在制作一个 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 (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

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

StorageFolder.GetFolderFromPathAsync(storageFolder.Path);

不起作用。 你知道解决办法吗?

【问题讨论】:

    标签: c# uwp


    【解决方案1】:

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

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

    我在我的博客文章Skip the path: stick to the StorageFile中更详细地讨论了这个问题

    【讨论】:

    • 重启App后能否获取到这个FutureAccessList的项目?
    • 是的,这就是重点。如果它只在应用程序的一次运行中工作,那么您首先不需要 FutureAccessList;您将继续使用 StorageFile。
    • 您好 Rob,我已经阅读了您的博文,对此我的感受很复杂 - 我了解这种方法的原因、特权等。但是如果我需要存储超过 1000 个文件的位置怎么办?假设我有一个在手机上显示图片的应用程序,某种数据库,我需要访问用户选择的文件,我不想将用户限制为 1000 个文件。对从 PicturesLibrary 返回的位于手机上的文件使用路径方法是否安全?拥有大量文件的数据库的最佳做法是什么?
    • 更糟糕的是,您持有的每个 StorageFile 或 StorageFolder 似乎都会导致 RuntimeBroker.exe 分配大约 60k。没有迹象表明微软对此采取任何行动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 2021-03-06
    • 2011-05-15
    • 2010-09-06
    • 2014-03-22
    相关资源
    最近更新 更多