Как найти несколько текстовых шаблонов в файлах / папках рекурсивно - PullRequest
0 голосов
/ 30 декабря 2011

Как можно было бы искать серию регулярных выражений, например,

Regex1, Regex2 против всех файлов на диске, например, C: \?

Ответы [ 2 ]

0 голосов
/ 30 декабря 2011

Я не уверен, как вы будете выполнять фактическое сопоставление содержимого файла с регулярным выражением, но вот как вы рекурсивно перемещаетесь по папке:

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);
    }
}
0 голосов
/ 30 декабря 2011

Я не знаю ни одного готового решения для чего-то подобного. Вам нужно будет рекурсивно перечислить все файлы, и для каждого файла вам нужно будет загрузить его содержимое в строку и применить ваши регулярные выражения к этой строке.

Для рекурсивного перечисления всех файлов по заданному пути я использую следующую функцию:

    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 );
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...