• 调试System.UnauthorizedAccessException(通常后跟:拒绝访问路径)


    今天,我要向您介绍System.UnauthorizedAccessException。异常通常是由IO错误引起的,但其他问题(如安全限制)也可以利用此错误。我们一起挖进去!

    制造错误

    捕捉异常非常简单。让我们创建一个小程序来触发和捕获此错误。在编写代码之前,我将创建一个名为c: emp eadonly.txt的文本文件。创建后,右键单击文件,选择属性并启用只读复选框。这会引起意外!,文件为只读。对于代码:

    class Program
    {
        static void Main(string[] args)
        {
            var path = "c:\temp\readonly.txt";
            try
            {
                File.Delete(path);
            }
            catch (UnauthorizedAccessException e)
            {
                Console.WriteLine(e);
            }
        }
    }

    如代码所示,我们只需捕获UnauthorizedAccessException并将其记录到控制台。

    调试这个错误

    UnauthorizedAccessException不包含其他状态或错误代码属性,因此您可以了解发生了什么。唯一的指示是查看消息属性,在大多数情况下,该属性类似于:

    Access to the path 'c:	emp
    otfound.txt' is denied.

    那么,为什么拒绝访问?我们可以先排除一些我见过的人们提出错误答案的场景:

    • 如果在磁盘上找不到文件(这不会引发UnauthorizedAccessException)。
    • 如果一个文件当前被另一个程序锁定(这将引发一个IOException)。
    • 如果文件被Windows阻止。
    • 访问不存在的目录中的文件(这会引发DirectoryNotFoundException)。

    只读文件

    处理文件时,最容易检查的可能是右键单击文件并检查是否选中了只读复选框:

    只需取消选中“只读”,然后再试一次。
    如果需要,可以解锁C中的只读文件,然后重试:

    class Program
    {
        static void Main(string[] args)
        {
            var path = "c:\temp\notfound.txt";
            try
            {
                File.Delete(path);
            }
            catch (UnauthorizedAccessException)
            {
                FileAttributes attributes = File.GetAttributes(path);
                if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
                {
                    attributes &= ~FileAttributes.ReadOnly;
                    File.SetAttributes(path, attributes);
                    File.Delete(path);
                }
                else
                {
                    throw;
                }
            }
        }
    }

    当前用户无权访问文件

    UnauthorizedAccessException的另一个实例是由用户执行程序时出现的问题引起的。如果不以提升模式运行(在Windows中具有管理权限),则当前用户将无法访问各种Windows目录,如c: Windows和c:Program Files。解决此错误的一个简单方法是以管理员身份运行程序。
    如果错误是由Windows服务生成的,请打开“服务”,在列表中找到您的服务并双击它。在“登录”选项卡上,确保您的服务配置为具有导致异常的资源访问权限的用户。作为网络服务运行的服务对本地资源的访问非常有限。我建议您与系统管理员聊天,以确定是要与默认服务用户一起使用,还是创建具有自定义权限的自定义服务用户。

  • 相关阅读:
    js基础四
    序列化和反序列化
    数组
    枚举
    Class对象和反射
    字符串String
    对象的克隆
    异常处理机制
    多继承和代码块
    接口和抽象类
  • 原文地址:https://www.cnblogs.com/yilang/p/12585708.html
Copyright © 2020-2023  润新知