如何递归搜索文件/文件夹中的多个文本模式

时间:2011-12-30 08:56:53

标签: c# .net windows

如何搜索一系列正则表达式,例如

Regex1,Regex2对驱动器上的所有文件重复,例如C:\?

2 个答案:

答案 0 :(得分:0)

我不知道任何现成的解决方案。您必须递归枚举所有文件,并且对于每个文件,您需要将其内容加载到字符串中并对该字符串应用正则表达式。

对于给定路径下所有文件的递归枚举,我使用以下函数:

    public static IEnumerable<Fileinfo> EnumerateMatches( string directory, string filenameonly, 
        bool dirs_only )
    {
        DirectoryInfo directory_info = new DirectoryInfo( directory );
        if( dirs_only )
        {
            DirectoryInfo[] infos = directory_info.GetDirectories( filenameonly );
            foreach( DirectoryInfo info in infos )
            {
                string subpathonly = Path.Combine( directory, info.Name );
                yield return new Fileinfo( info.FullName, true, info.LastWriteTime, 0 );
            }
        }
        else
        {
            FileInfo[] infos = directory_info.GetFiles( filenameonly );
            foreach( FileInfo info in infos )
            {
                yield return new Fileinfo( info.FullName, false, info.LastWriteTime, info.Length );
            }
        }
    }

答案 1 :(得分:0)

我不确定你将如何对文件内容进行实际的正则表达式匹配,但这里是你递归导航文件夹的方式:

public void NavigateFolder(DirectoryInfo d)
{
    foreach (FileInfo f in d.GetFiles())
    {
        //create a streamreader and try to match regex to file contents here
    }

    foreach (DirectoryInfo d in d.GetDirectories())
    {
        NavigateFolder(d);
    }
}