使用GetDirectory浏览每个文件夹

时间:2016-10-26 00:23:14

标签: c# file recursion directory

这是我的代码:

private static bool checkifDirectoryContainsFilesWithSpecifiedExtention(string path, string fileExestention) //Like C:\\smth, *.html
    {          
            foreach (string f in Directory.GetFiles(path,fileExestention))
            {
                return true;
            }
            foreach (string d in Directory.GetDirectories(path))
            {
                 return checkifDirectoryContainsFilesWithSpecifiedExtention(d,fileExestention);
            }
            return false;
    }

在此函数中,程序返回具有指定扩展名的每个文件但是如果我只包含一个在最后一个文件夹中具有指定扩展名的文件,则该函数返回false,因为它存在,所以没有任何意义

我的问题是它为什么这样做......

试一试。我真的找不到这个错误。

3 个答案:

答案 0 :(得分:1)

问题是foreach内部的“return”(Directory.GetDirectories(path)中的字符串d)循环。它只会检查每个级别的第一个目录。你需要这样的东西(不好,但保持你的风格/格式)

bool ok = false;
foreach (string d in Directory.GetDirectories(path))
{
    ok = ok || checkifDirectoryContainsFilesWithSpecifiedExtention(d,
       fileExestention);
}
return ok;

更好的是,使用Marc提供的linq。

答案 1 :(得分:0)

将其转换为LINQ查询

    private static bool CheckifDirectoryContainsFilesWithSpecifiedExtention(string path, string fileExestention)
        //Like C:\\smth, *.html
    {
        return Directory.GetFiles(path, fileExestention).Any() ||
               Directory.GetDirectories(path)
                        .Select(d => CheckifDirectoryContainsFilesWithSpecifiedExtention(d, fileExestention))
                        .FirstOrDefault();
    }

使用* .exe作为掩码在一些调试文件夹上尝试它,它返回true。它也遍历子文件夹。不确定你在最后一个文件夹中的一个文件是什么意思。

看看它是否适合你。

答案 2 :(得分:0)

这对我有用

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace StackOverflowSnippets
{
    class Program
    {
        static void Main(string[] args)
        {
            String path = @"C:\smth"; String pattern = "*.html";

            Console.WriteLine("__" + checkifDirectoryContainsFilesWithSpecifiedExtention(path, pattern));

            Console.ReadLine();
        }

        private static bool checkifDirectoryContainsFilesWithSpecifiedExtention(string path, string fileExestention) //Like C:\\smth, *.html
        {
            foreach (string f in Directory.GetFiles(path, fileExestention))
            {
                return true;
            }
            foreach (string d in Directory.GetDirectories(path))
            {
                if (checkifDirectoryContainsFilesWithSpecifiedExtention(Path.Combine(path, d), fileExestention))
                {
                    return true;
                }
            }

            return false;
        }
    }
}