catch之后继续搜索访问路径异常

时间:2013-08-22 10:18:03

标签: c#

这是我从给定路径搜索文件的函数:

static void dirSearch(string dir)
{
    try
    {
        foreach (string item in Directory.GetDirectories(dir))
        {
            Console.WriteLine(item);
            foreach (string str in Directory.GetFiles(item))
            {
                Console.WriteLine("\t" + str);
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

为什么在捕获异常之后函数停止而不是继续并在有权限的文件夹中显示我的其余文件?

1 个答案:

答案 0 :(得分:3)

该函数在捕获异常后停止,因为try / catch在循环之外。将其移动到循环中以获得所需的效果:

static void dirSearch(string dir)
{
    foreach (string item in Directory.GetDirectories(dir))
    {
        Console.WriteLine(item);
        try
        {
            foreach (string str in Directory.GetFiles(item))
            {
                Console.WriteLine("\t" + str);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

请注意,此功能仅搜索一级目录。如果要以递归方式搜索,则需要为找到的每个目录调用dirSearch,如下所示:

static void dirSearch(string dir)
{
    Console.WriteLine(dir);
    foreach (string item in Directory.GetDirectories(dir))
    {
        try
        {
            dirSearch(item);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
    foreach (string str in Directory.GetFiles(dir))
    {
        Console.WriteLine("\t" + str);
    }
}