如何忽略“拒绝访问路径”/ C#中的UnauthorizedAccess异常?

时间:2012-01-16 08:50:26

标签: 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 \'。”请帮帮我......

谢谢,

3 个答案:

答案 0 :(得分:8)

最好的方法是添加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({{3}抛出此异常功能)......

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

编辑:正如下面的评论中指出的那样,您似乎正在使用GetFiles函数调用进行递归搜索。如果你想要绕过任何错误并继续,那么你需要编写自己的递归函数。 Directory.GetFiles将满足您的需求。这是一个应该正是你需要的修改......

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;
}

答案 1 :(得分:2)

在c#编程指南中查看这篇文章:

How to: Iterate Through a Directory Tree (C# Programming Guide)

答案 2 :(得分:0)

基于MS页面和stackoverflow上的各种尝试,我有一个似乎有效的解决方案,并避免了所有GetFiles()/ GetDirectories()异常。

cf https://stackoverflow.com/a/10728792/89584

(原始问题可能被认为与此重复,反之亦然)。