我有一个测试程序,它应该遍历C:下的所有文件.当它到达"Documents and Settings"文件夹时它会死掉.我想忽略错误并继续循环其余文件.问题是,抛出异常在的foreach,所以把一个try/catch绕foreach会导致循环退出.并把一try/catch后foreach永远不会触发(因为抛出异常的的foreach).有没有办法忽略异常并继续处理循环?
这是代码:
static void Main(string[] args)
{
IEnumerable<string> files = Directory.EnumerateFiles(@"C:\", "*.*",
SearchOption.AllDirectories);
foreach (string file in files) // Exception occurs when evaluating "file"
Console.WriteLine(file);
}
Run Code Online (Sandbox Code Playgroud)
您可能会收到 UnauthorizedAccessException 因为某些文件是隐藏的或系统文件。由于您正在使用字符串(来自枚举文件)而不是文件信息或目录信息对象,因此我重写了此文件以适合您的设计:
首先添加这2个成员变量:
private static Dictionary<DirectoryInfo, List<string>> DirectoryTree = new Dictionary<DirectoryInfo, List<string>>();
private static List<string> logger = new List<string>();
Run Code Online (Sandbox Code Playgroud)
然后放置这个方法:
static void RecursiveSearch(string root)
{
string[] files = null;
string[] subDirs = null;
// First, process all the files directly under this folder
try
{
files = Directory.EnumerateFiles(root).ToArray();
}
catch (UnauthorizedAccessException e)
{
logger.Add(e.Message);
}
catch (System.IO.DirectoryNotFoundException e)
{
Console.WriteLine(e.Message);
}
if (files != null)
{
DirectoryTree.Add(new DirectoryInfo(root), files.ToList());
subDirs = Directory.GetDirectories(root);
foreach (string dir in subDirs)
{
RecursiveSearch(dir);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在 Main 中你可以这样称呼它:
RecursiveSearch(@"c:\");
Run Code Online (Sandbox Code Playgroud)
您的 DirectoryTree 字典和列表记录器将被填充后。
| 归档时间: |
|
| 查看次数: |
6032 次 |
| 最近记录: |