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

3

我是C#的新手,对编程不是很熟练,但我似乎无法弄清楚导致这个问题的原因。我让用户选择一个XML文件,然后想读取它的内容。这是在C#中制作通用的Windows 10应用程序。

以下是我收到的错误信息:

系统发生了“System.UnauthorizedAccessException”类型的异常,但未在用户代码中处理

其他信息:拒绝访问路径“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时,我遇到了错误。尽管我调查了原因,但是权限并不是问题所在。如有帮助,不胜感激。谢谢。


你是怎么确定权限不是问题的?谁有什么NTFS 权限? - lloyd
尝试将文件放入桌面文件夹中,看看是否可以从那里加载。这可能是文件权限的问题,因此UAC正在阻止访问。 - Kidades
如果这不是权限问题,那可能是文件被其他程序读取独占锁定了,或者该文件被设置为只读属性。 - Asad Saeeduddin
1
这与“传统”权限无关,而是由于商店应用程序被沙盒化。 - Peter Torr - MSFT
3个回答

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

太棒了,这让我走上了我需要的道路。谢谢! - Keith Hill

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

如果您打算提交Windows Store应用程序,则无法解决这些类型的问题。 - Peter Torr - MSFT

0

Peter Torr的回答是正确的,也是微软希望这些事情被完成的方式,但是有可能使OP代码的(至少部分)工作。如果路径是您拥有权限的目录之一,则reset方法将起作用。要获取这些目录,可以使用ApplicationData.Current。此对象包含诸如LocalFolderLocalCacheFolder或(对于您的用例可能很有趣的)SharedFolder等属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接