通过FilePicker访问时,StorageFolder.GetFolderFromPathAsync上的UnAuthorizedAccessException

时间:2015-05-13 22:15:08

标签: c# windows-runtime windows-store-apps windows-10

我尝试从网络位置读取文件。但我一直收到UnAuthorizedAccessException。

我通过StorageFolder.GetFolderFromPathAsync选择StorageFolder,但列出文件会引发异常。

当我通过FolderPicker选择相同的文件夹时,它可以正常工作。

所以我尝试使用此代码查明问题:

FolderPicker picker = new FolderPicker();
picker.FileTypeFilter.Add("*");

StorageFolder pickedFolder = await picker.PickSingleFolderAsync();
if (pickedFolder != null)
{
    var pickedFolderList = await pickedFolder.GetFilesAsync();
    var count = pickedFolderList.Count;
    if (count > 0)
    {
        StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(pickedFolder.Path);
        var pathFolderList = await folder.GetFilesAsync(); //Exception
        if (pathFolderList.Count == count)
        {
             ProcessFolder(folder);
        }
    }
}

在设置变量pathFolderList的标记行处抛出异常。虽然我已经在上面几行列出了相同的文件夹。

我已经设置了这些功能:

<Capabilities>
  <Capability Name="internetClient" />
  <Capability Name="privateNetworkClientServer"/>
  <uap:Capability Name="enterpriseAuthentication"/>
  <uap:Capability Name="removableStorage"/>
</Capabilities>

我错过了什么?

1 个答案:

答案 0 :(得分:3)

您的应用无权访问该路径。访问文件的权限是通过选择器返回的StorageFolder处理的。

而不是尝试从pickedFolder

创建新的StorageFolder
StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(pickedFolder.Path);

只需使用pickedFolder本身:

var pathFolderList = await pickedFolder.GetFilesAsync(); //Exception

我在博客文章Skip the path: stick to the StorageFile

中详细介绍了这一点