Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 捕获对路径异常的访问后继续搜索_C# - Fatal编程技术网

C# 捕获对路径异常的访问后继续搜索

C# 捕获对路径异常的访问后继续搜索,c#,C#,这是我的函数,用于从给定路径搜索文件: static void dirSearch(string dir) { try { foreach (string item in Directory.GetDirectories(dir)) { Console.WriteLine(item); foreach (string str in Directory.GetFiles(item))

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

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

我需要把dirSearch呼叫放在哪里?出了点问题,第二个foreach需要在其他地方吗?@user2214609你能看到哪里出了问题吗?这是一个简单的复制/粘贴错误。如果你不看我的编辑就知道了,那么你就理解了这个方法。