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

时间:2015-09-04 00:25:32

标签: c# windows-10

我是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时,当我收到错误时。当我寻找原因时,我发现的唯一事情是由于权限,但事实并非如此。任何帮助,将不胜感激。感谢。

3 个答案:

答案 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。此对象包含LocalFolderLocalCacheFolder或(对您的用例可能有用的内容)SharedFolder等属性。