我是C#的新手而不是编程方面的专家,但我似乎无法弄清楚造成这个问题的原因。我让用户选择一个XML文件,然后我想阅读它的内容。这是在C#中制作通用的Windows 10应用程序
这是我得到的错误:
类型' System.UnauthorizedAccessException'的例外情况发生在 mscorlib.ni.dll但未在用户代码中处理
其他信息:访问路径' C:\ temp \ file.xml'是 拒绝。
public async static void pickFile()
{
FileOpenPicker openPicker = new FileOpenPicker();
openPicker.ViewMode = PickerViewMode.List;
openPicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
openPicker.FileTypeFilter.Add(".xml");
StorageFile file = await openPicker.PickSingleFileAsync();
if (file != null)
{
var t = Task.Run(() => { reset(file.Path); });
}
}
然后
private static void reset(string path)
{
String LocationDatafilename = path;
XmlReaderSettings settings = new XmlReaderSettings();
XmlReader reader = XmlReader.Create(LocationDatafilename, settings);
XmlDocument LocationDataXml = new XmlDocument();
LocationDataXml.Load(Globals.reader);
}
当我接到XmlReader.Create
时,当我收到错误时。当我寻找原因时,我发现的唯一事情是由于权限,但事实并非如此。任何帮助,将不胜感激。感谢。
答案 0 :(得分:1)
您需要直接操作StorageFile
,因为您的应用无权直接读取用户的文件。您可以使用WinRT XML API,也可以继续使用.NET API并使用基于流的Create
函数,而不是使用文件名的函数。
答案 1 :(得分:0)
运行sysinternal的ProcMon应用程序,同时运行您的应用程序。在procmon capture中找到该文件,在CreateFile条目中,您将找到创建Disposition。这将为您提供创建失败原因的线索。此外,选择“用户”列以显示执行操作的用户。
答案 2 :(得分:0)
虽然Peter Torr的答案是正确的,并且是微软想要完成这些事情的方式,但也可以使(至少部分)OP的代码也能正常工作。如果路径是您拥有权限的目录之一,则reset
方法将起作用。要获得这些,您可以使用ApplicationData.Current
。此对象包含LocalFolder
,LocalCacheFolder
或(对您的用例可能有用的内容)SharedFolder
等属性。