1

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

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);
    }
}

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

4

1 回答 1

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);
    }
}
于 2013-08-22T10:20:16.393 回答