【问题标题】:How do I check if an access to a string path is denied?如何检查对字符串路径的访问是否被拒绝?
【发布时间】:2012-03-20 20:22:30
【问题描述】:

我想知道如何测试我是否可以访问字符串路径。这是我使用的代码:

using System;
using System.IO;

namescpace prog1
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"C:\Users\Admin";
            DirectoryInfo dir = new DirectoryInfo(path);
            foreach (FileInfo fil in dir.GetFiles())
            {
                //At dir.GetFiles, I get an error  saying
                //access to the string path is denied.

                Console.WriteLine(fil.Name);
            }
            Console.ReadLine();
        }
    }
}

我想测试访问是否被拒绝(到字符串路径) 然后执行 GetFiles 和所有这些操作。

我已经找到了这个:how can you easily check if access is denied for a file in .NET?

有什么帮助吗?

【问题讨论】:

  • 你不能把它包装在一个 try/catch 块中吗?
  • 您可以捕获异常...如果您遇到异常 => 您无权访问...
  • 捕获 UnauthorizedAccessExceptions 的开销会不会太大?

标签: c# file-access


【解决方案1】:

最简单(通常也是最安全)的选择是只做你现在正在做的事情,但将代码包装在适当的异常处理中。

然后您可以从GetFiles 中捕获UnauthorizedAccessException(可能还有来自DirectoryInfo 构造函数的SecurityException,具体取决于路径),并将您的处理逻辑放在那里。

【讨论】:

    【解决方案2】:

    可以这样做:

    static void Main(string[] args)
    {
         string path = @"C:\Users\Admin";
         DirectoryInfo dir = new DirectoryInfo(path); 
         FileInfo[] files = null;
         try {
                files = dir.GetFiles();
         }
         catch (UnauthorizedAccessException ex) {
             // do something and return
             return;
         }
    
         //else continue
         foreach (FileInfo fil in files )
         {
            //At dir.GetFiles, I get an error  saying
            //access to the string path is denied.
    
             Console.WriteLine(fil.Name);
          }
          Console.ReadLine();
    }
    

    【讨论】:

    • AccessDeniedExpection 在我的上下文中不存在,我该怎么办?
    • @MátéHomolya:已更正,它是UnauthorizedAccessException
    • 谢谢大家,我用这个 try/catch 东西搞定了。这对我来说是新的。
    猜你喜欢
    • 2021-04-02
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 2013-02-21
    • 1970-01-01
    相关资源
    最近更新 更多