如何绕过/忽略 “访问path被拒绝”/ UnauthorizedAccessexception
并继续在这个方法中收集文件名;
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的第一行上, “访问path'C:\ @日志\'被拒绝。” 请帮帮我…
谢谢,
最好的办法是添加一个Try / Catch块来处理异常。
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函数调用的递归搜索。 如果你想这个绕过任何错误并继续,那么你将需要编写自己的递归函数。 这里有一个很好的例子 ,将会做你需要的。 这是一个修改,应该正是你所需要的…
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#编程指南)
基于MS页面和在这里stackoverflow上的各种尝试,我有一个似乎工作,并避免所有的GetFiles()/ GetDirectories()异常的解决方案。
cf https://stackoverflow.com/a/10728792/89584
(原始问题可能被认为是重复的,反之亦然)。