Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对路径的访问被拒绝,但文件没有限制_C#_Windows 10 - Fatal编程技术网

C# 对路径的访问被拒绝,但文件没有限制

C# 对路径的访问被拒绝,但文件没有限制,c#,windows-10,C#,Windows 10,我是C语言新手,不是一般编程方面的专家,但我似乎不知道是什么导致了这个问题。我让用户选择一个XML文件,然后我想读取它的内容。这是用C语言制作的通用windows 10应用程序 这就是我得到的错误: 中发生“System.UnauthorizedAccessException”类型的异常 mscorlib.ni.dll,但未在用户代码中处理 其他信息:无法访问路径“C:\temp\file.xml” 否认 然后 当我进入XmlReader.Create时,我就会得到错误。当我查找原因时,我发现唯

我是C语言新手,不是一般编程方面的专家,但我似乎不知道是什么导致了这个问题。我让用户选择一个XML文件,然后我想读取它的内容。这是用C语言制作的通用windows 10应用程序

这就是我得到的错误:

中发生“System.UnauthorizedAccessException”类型的异常 mscorlib.ni.dll,但未在用户代码中处理

其他信息:无法访问路径“C:\temp\file.xml” 否认

然后


当我进入XmlReader.Create时,我就会得到错误。当我查找原因时,我发现唯一的原因是权限,但事实并非如此。任何帮助都将不胜感激。谢谢。

您需要直接操作StorageFile,因为您的应用程序没有直接读取用户文件的权限。您可以使用WinRT XML API,也可以继续使用.NET API并使用基于流的创建函数,而不是采用文件名的函数。

运行sysinternal的ProcMon应用程序,同时运行应用程序。在procmon捕获中找到该文件,并在CreateFile条目中找到创建配置。这将为您提供创建失败的线索。此外,选择“用户”列以显示执行操作的用户。

虽然Peter Torr的回答是正确的,并且是Microsoft希望这些操作的方式,但至少可以使OP的部分代码工作。如果路径指向您有权限访问的目录之一,则重置方法将起作用。要获取这些数据,可以使用ApplicationData.Current。此对象包含LocalFolder、LocalCacheFolder或您的用例SharedFolder可能感兴趣的属性。

您是如何确定权限不是这种情况的?谁有什么权限?试着将文件放在桌面文件夹中,看看是否可以从那里加载。可能是文件权限有问题,所以UAC正在阻止访问。如果不是权限问题,可能是文件具有其他文件的读取独占锁,或者文件具有只读属性集。这与传统权限无关,但这是由于应用商店应用程序被沙盒化。太棒了,这让我走上了我需要的道路。谢谢如果您打算提交Windows应用商店应用程序,则无法解决这些类型的问题。
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);
        }