捕获访问路径异常后继续搜索

本文关键字:继续 搜索 异常 路径 访问 | 更新日期: 2023-09-27 18:28:32

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

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

为什么在捕捉到异常后,函数会停止而不继续,并向我显示具有权限的文件夹中的其余文件?

捕获访问路径异常后继续搜索

函数在捕获异常后停止,因为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);
    }
}