У меня есть приложение C #, которое использует функции поиска, чтобы найти все файлы в каталоге, а затем показывает их в списке. Мне нужно иметь возможность фильтровать файлы по расширению (возможно, используя функцию поиска) и (например, блокировать показ любых в каталогах "test" или "debug").
Мой текущий код выглядит примерно так:
Regex filter = new Regex(@"^docs\(?!debug\)(?'display'.*)\.(txt|rtf)");
String[] filelist = Directory.GetFiles("docs\\", "*", SearchOption.AllDirectories);
foreach ( String file in filelist )
{
Match m = filter.Match(file);
if ( m.Success )
{
listControl.Items.Add(m.Groups["display"]);
}
}
(это несколько упрощено и обобщено, фактическое регулярное выражение создается из строки, считываемой из файла, и я делаю дополнительную проверку ошибок между ними.)
Мне нужно иметь возможность выбрать раздел (обычно относительный путь и имя файла), который будет использоваться в качестве отображаемого имени, при этом игнорируя любые файлы с определенным именем папки в качестве раздела их пути. Например, для этих файлов должны совпадать только файлы с + s:
+ docs\info.txt
- docs\data.dat
- docs\debug\info.txt
+ docs\world\info.txt
+ docs\world\pictures.rtf
- docs\world\debug\symbols.rtf
Мое регулярное выражение работает для большинства из них, за исключением того, что я не уверен, как заставить его работать с ошибкой в последнем файле Любые предложения о том, как сделать эту работу?