c# - 如何在 C# 中忽略 "Access to the path is denied"/UnauthorizedAccess 异常?

标签 c# windows file-io try-catch

如何绕过/忽略“访问路径被拒绝”/UnauthorizedAccess异常

继续以这种方法收集文件名;

public static string[] GetFilesAndFoldersCMethod(string path)
{
   string[] filenames = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories).Select(Path.GetFullPath).ToArray();
   return filenames;
}

//调用... ...

foreach (var s in GetFilesAndFoldersCMethod(@"C:/"))
{
    Console.WriteLine(s);
}

我的应用程序在 GetFilesAndFoldersCMethod 的第一行停止,并出现异常; “访问路径 'C:\@Logs\' 被拒绝。”。请帮助我...

谢谢,

最佳答案

最好的方法是添加一个 Try/Catch block处理异常...

try
{
   string[] filenames = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories).Select(Path.GetFullPath).ToArray();
   return filenames;
}
catch (Exception ex)
{
   //Do something when you dont have access
   return null;//if you return null remember to handle it in calling code
}

您还可以专门处理 UnauthorizedAccessException如果您正在此函数中执行其他代码并且您想要确保它是导致它失败的访问异常(此异常由 Directory.GetFiles 函数抛出)...

try
{
   //...
}
catch(UnauthorizedAccessException ex)
{
    //User cannot access directory
}
catch(Exception ex)
{
    //a different exception
}

编辑:正如下面评论中所指出的,您似乎正在使用 GetFiles 函数调用进行递归搜索。如果您希望它绕过任何错误并继续,那么您将需要编写自己的递归函数。 There is a great example here那会做你需要的。这是一个应该正是您需要的修改...

List<string> DirSearch(string sDir) 
{
   List<string> files = new List<string>();

   try  
   {
      foreach (string f in Directory.GetFiles(sDir)) 
      {
         files.Add(f);
      }

      foreach (string d in Directory.GetDirectories(sDir)) 
      {
         files.AddRange(DirSearch(d));
      }
   }
   catch (System.Exception excpt) 
   {
      Console.WriteLine(excpt.Message);
   }

   return files;
}

关于c# - 如何在 C# 中忽略 "Access to the path is denied"/UnauthorizedAccess 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8877516/

相关文章:

Java ".class"属性 - C# 等价物

c# - 最佳实践 - 不同的程序模型/使用变量以编程方式决定表单如何创建

c# - 静态类和静态方法

c++ - Windows 10 中的 Windows 服务安装/卸载

file-io - 如何使用 InstallShield 添加 Windows 文件类型关联?

c# - 获取编译器生成的事件委托(delegate)

windows - (Python wave 模块)不能在不影响播放速度的情况下改变音频采样率

相当于 bash 字符串操作的 Windows bat 文件

mysql - 如何将一个大表导出为 50 个较小的 csv 文件,每个文件包含 100,000 条记录

linux - Bash 读/写文件描述符——寻找文件的开始