2012-01-16 40 views
1

如何旁路/忽略“的路径访问被拒绝”/UnauthorizedAccess例外如何忽略“访问路径被拒绝”/未经授权访问C#中的异常?

继续收集在这个方法中的文件名;

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的firstline和异常说; “访问路径'C:\ @ Logs \'被拒绝。”请帮我...

谢谢,要做到这一点

+0

不看我,就像你可以请求这个方法在遇到错误时继续枚举。我想你必须推出自己的统计员或找到更灵活的其他班级。 – 2012-01-16 09:21:44

回答

7

最好的办法是增加一个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; 
} 
+0

当然枚举也会在那里停止 – 2012-01-16 09:18:35

+0

@DavidHeffernan:是的,但枚举是在一个字符串数组上 - 这是给定目录中的所有文件,并且由于目录引发了访问异常,所以无论如何所有文件都将无法访问。我的假设是,如果用户搜索多个目录,那么他们有循环/递归函数围绕示例for循环。当然,我可能会假设错误,将不得不等待一个OP响应,以确保 – musefan 2012-01-16 09:23:20

+0

@DavidHeffernan:我的错误,我现在看到,GetFiles调用正在做递归工作 – musefan 2012-01-16 09:24:53

0

基于MS网页和各种上尝试在这里在stackoverflow,我有一个似乎工作的解决方案,并避免所有的GetFiles()/ GetDirectories()异常。

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

(原来的问题可能会被认为是本一式二份,反之亦然)。