UWP FolderPicker授予对所有子路径的访问权

时间:2019-10-30 01:30:05

标签: c# windows uwp

我正在Windows通用应用程序中使用FolderPicker来让用户选择目录,当他们完成操作后,我需要访问该目录下已知子路径中的几个不同文件。我可以选择目录,但是当我尝试从那里访问子路径时,仍然会拒绝访问。有什么方法可以授予对父目录中多个文件的访问权限,而不必强迫用户手动选择每个需要访问的文件?

这是我的代码,用于打开文件夹选择器并将所选目录添加到我的将来访问列表中:

var folderPicker = new Windows.Storage.Pickers.FolderPicker();
folderPicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Desktop;
folderPicker.FileTypeFilter.Add("*");

Windows.Storage.StorageFolder folder = await folderPicker.PickSingleFolderAsync();
if (folder != null) {
       StorageApplicationPermissions.FutureAccessList.AddOrReplace("GitDirectory", folder);
       PathTextBox.Text = folder.Path;
       this.IsPrimaryButtonEnabled = true;
}

(为我的命名约定致歉,我是Win / C#领域的新手,所以我以一种大杂烩的方式写作)

这是另一个尝试访问子路径的类中的代码。您可以假定变量GitDirectory先前已分配给调用FutureAccessList.GetFolderAsync("GitDirectory");的结果,因为它具有:

StorageFile iniFile = await GitDirectory.GetFileAsync(@"datafiles\i18n\en_US.ini");
IniData data = iniParser.ReadFile(iniFile.Path);

最后一行是最终引发此异常的地方: Access to the path 'E:\Documents\git\asirra\datafiles\i18n\en_US.ini' is denied.

非常感谢您提前提供帮助

1 个答案:

答案 0 :(得分:4)

这里的问题是,当您通过StorageFile实例在任意位置(用户选择)访问文件时,需要使用此特定实例来处理文件。您无法通过访问文件的路径(file.Path)直接访问文件。

我在GitHub上检查了IniParser源代码,发现您可以改用IniDataParser API,例如以下方法:

IniData Parse(StringReader stringReader)

您可以阅读ini文件,然后将其传递给解析器:

var iniFile = await GitDirectory.GetFileAsync(@"datafiles\i18n\en_US.ini");
var text = await FileIO.ReadAllTextAsync(iniFile);
var parser = new IniDataParser();
var data = parser.Parse(text);