我有一个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"]);
}
}
(这在某种程度上简化和合并了,实际的regex是从一个文件中读取的字符串创建的,我在这两者之间做了更多的错误检查。)
我需要能够选择一个节(通常是相对路径和文件名)作为显示名,而忽略任何具有特定文件夹名作为其路径节的文件。例如,对于这些文件,只有带+s的文件才应匹配:
+ docs\info.txt
- docs\data.dat
- docs\debug\info.txt
+ docs\world\info.txt
+ docs\world\pictures.rtf
- docs\world\debug\symbols.rtf
我的regex适用于大多数情况,但我不知道如何使它在最后一个文件中失败。有什么关于如何使这个工作的建议吗?