拒绝访问路径,但文件没有限制

本文关键字:有限制 文件 路径 拒绝访问 | 更新日期: 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