我正在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.
非常感谢您提前提供帮助
答案 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);