“访问路径......被拒绝”(.NET C#)

Posted

技术标签:

【中文标题】“访问路径......被拒绝”(.NET C#)【英文标题】:"Access to the path ... is denied" (.NET C#) 【发布时间】:2010-11-29 20:57:38 【问题描述】:

我一直在将一个小的 XML 数据文件保存到外部驱动器,没有问题。但后来我尝试使用 ApplicationData 文件夹和其他文件夹,甚至 C:\ 但没有运气。我收到类似“访问路径“C:\”被拒绝”这样的错误。

只是为了确认,文件已创建并使用当前代码正常读取到外部驱动器。我想这与安全和权限有关,但我没有发现任何有用的东西。

如果您能在这个问题上指出正确的方向,请提前致谢!

        string fipData = @"F:\IL2\SIIYM\SIIYM Data.xml";  //  external drive ok :-)
        //string fipData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
        //string fipData = @"C:\";

        //  if the XML data file doesn't exist, create it
        bool dataFileExists = File.Exists(fipData);
        if (dataFileExists)
        
            //  read the XML values
            XDocument xData = XDocument.Load(fipData);
            //...
        
        else
        
            //  create & save the XML data file
            XElement xLastPath = new XElement(el_lastPath, "");
            XElement xLastCode = new XElement(el_lastCode, "");

            XElement xRoot = new XElement(el_root);
            xRoot.Add(xLastPath);
            xRoot.Add(xLastCode);

            XDocument newDataFile = new XDocument();
            newDataFile.Add(xRoot);

            try
            
                newDataFile.Save(fipData);
            
            catch (Exception ex)
               
                MessageBox.Show("Data file unable to be created. System message:0".Put(Environment.NewLine + Environment.NewLine + ex.Message));
            
        

【问题讨论】:

嗯...我不知道为什么,但是今天早上醒来时,它适用于 ApplicationData。很高兴知道为什么。从 Debug 更改为 Release 构建时我遇到了一些问题。我只能假设它与此有关。谢谢大家的想法! 示例代码中注释掉的“fipData”声明实际上并没有指定文件名 - 只是路径。是不是打错字了? 腮红马特,这可能是原因。漫长的一天,脑筋急转弯。谢谢大家的想法! 【参考方案1】:

我只能想象应用程序必须在无权访问本地驱动器的用户的上下文中运行,例如在匿名 IIS 帐户下运行的 ASP.NET 网站或只能访问相关网络位置的服务帐户。

【讨论】:

糟糕,这里的上下文是: * 我的个人电脑 * Windows 7 * 桌面应用程序 是不是我的 UAC 设置(默认)太高了?我怎么知道它是否可以在其他人的计算机上运行?【参考方案2】:

外部驱动器很可能是用 FAT 格式化的。 FAT不支持对用户进行权限管理,所以保存在那里是可以的。

除了 IIS 用户对 Adam 已经提到的其他文件夹没有任何权限

【讨论】:

【参考方案3】:

在另一个答案的 cmets 中,您说这是一个桌面应用程序,所以让我们分别处理每个位置。

在Vista及更高版本下,普通用户无权在系统驱动器(通常是C:)的根目录下创建文件。您可以通过在资源管理器中打开 C:\,右键单击并尝试创建文件来亲眼看到这一点 - 您应该会看到 UAC 提示。因此,如果您想写入 C:\,那么您的应用程序需要以管理员身份运行,通过合适的清单要求提升,或者在您想要写入该位置时启动单独的进程。

应用程序数据,Environment.SpecialFolder.ApplicationData 但是应该可以工作。如果您输出返回的实际目录,您会得到什么?

【讨论】:

感谢您的回复! Environment.SpecialFolder.ApplicationData: C:\Users\MrGreggles\AppData\Roaming\SIIYM Data.xml 我在使用 Enviroment.SpecialFoler 时也遇到了拒绝访问错误...

以上是关于“访问路径......被拒绝”(.NET C#)的主要内容,如果未能解决你的问题,请参考以下文章

访问路径被拒绝 - C# Directory.Move

dotnet 6.0 C# - 访问路径被拒绝

访问路径被拒绝

无法复制文件 - 访问路径被拒绝

IIS - 访问路径被拒绝

File.ReadAllText(): System.UnauthorizedAccessException: '访问路径被拒绝。'