Mag*_*son 5 .net linq exception enumerate
在.NET 4中,这个带有递归的Directory.EnumerateFiles()方法看起来很方便.
但是,如果在递归中发生异常,我如何继续/从中恢复并继续枚举其余文件?
try
{
var files = from file in Directory.EnumerateFiles("c:\\",
"*.*", SearchOption.AllDirectories)
select new
{
File = file
};
Console.WriteLine(files.Count().ToString());
}
catch (UnauthorizedAccessException uEx)
{
Console.WriteLine(uEx.Message);
}
catch (PathTooLongException ptlEx)
{
Console.WriteLine(ptlEx.Message);
}
Run Code Online (Sandbox Code Playgroud)
我确实找到了解决这个问题的方法。通过使用堆栈来压入枚举结果,确实可以处理异常。这是一个代码片段:(受本文启发)
List<string> results = new List<string>();
string start = "c:\\";
results.Add(start);
Stack<string> stack = new Stack<string>();
do
{
try
{
var dirs = from dir in Directory.EnumerateDirectories(
start, "*.*", SearchOption.TopDirectoryOnly)
select dir;
Array.ForEach(dirs.ToArray(), stack.Push);
start = stack.Pop();
results.Add(start);
}
catch (UnauthorizedAccessException ex)
{
Console.WriteLine(ex.Message);
start = stack.Pop();
results.Add(start);
}
} while (stack.Count != 0);
foreach (string file in results)
{
Console.WriteLine(file);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2620 次 |
| 最近记录: |