拒绝访问路径,但文件没有限制
本文关键字:有限制 文件 路径 拒绝访问 | 更新日期: 2023-09-27 18:11:18
我是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
时,这就是我得到错误的时候。当我寻找原因时,我发现唯一的原因是由于权限,但事实并非如此。任何帮助都会很感激。谢谢。
你需要直接在StorageFile
上操作,因为你的应用程序没有直接读取用户文件的权限。您可以使用WinRT XML API,也可以继续使用。net API,并使用基于流的Create
函数,而不是接受文件名的函数。
运行sysinternal的ProcMon应用程序,同时运行您的应用程序。在procmon捕获中找到该文件,并在CreateFile条目中找到创建处置。这将提示您创建失败的原因。同时,选择"User"列显示执行该操作的用户。
虽然Peter Torr的回答是正确的,并且是微软希望这些事情完成的方式,但也有可能使OP的代码(至少部分)工作。如果路径是您拥有权限的目录之一,那么reset
方法将起作用。要得到这些,你可以使用ApplicationData.Current
。该对象包含LocalFolder
, LocalCacheFolder
或(您的用例可能感兴趣的)SharedFolder
。