2016-03-07 92 views
-1

我有一个像检查文件是否属于一个文件夹

c:\test\data\product\delete\ 
c:\test\data\order\delete\ 
c:\test\data\quote\delete\ 
c:\temp\data\abc\delete\ 
c:\temp\data\pqr\delete\ 
c:\temp\data\xyz\delete\ 

等目录...

所有delete文件夹包含一些文件。 问题是,当我有一个文件,例如:

c:\test\data\order\delete\order1.txt 

我要检查它是否属于上述任何目录。

Regex有可能吗?还是有没有更好的方法来做到这一点。

感谢

回答

0

Regex没有必要在这种情况下。你可以像下面这样做:

List<string> foldersList = new List<string> 
{ 
    @"c:\test\data\product\delete\", 
    @"c:\test\data\order\delete\", 
    @"c:\test\data\quote\delete\", 
    @"c:\temp\data\abc\delete\", 
    @"c:\temp\data\pqr\delete\", 
    @"c:\temp\data\xyz\delete\" 
}; 
string file = @"c:\test\data\order\delete\order1.txt"; 

bool isChild = foldersList.Any(f => file.StartsWith(f)); 

上面的代码是区分大小写的搜索。要搜索不区分大小写的,你可以像波纹管:

bool isChild = foldersList.Any(
    f => file.IndexOf(f, StringComparison.OrdinalIgnoreCase) == 0); 

在情况下,它必须是Regex,就可以像波纹管:

bool isChild = foldersList.Any(
    f => Regex.IsMatch(file, "^" + Regex.Escape(f), RegexOptions.IgnoreCase)); 

^意味着比赛的开始字符串。

+0

谢谢樱花。对不起,我忘了提及没有固定的文件夹。但有一个像“c:\ test \ data \ * \ delete”和“c:\ temp \ data \ * \ delete”的模式 – user2994641

+0

您能编辑您的问题并添加更多信息吗?我会编辑我的答案以适合您的需求。 – Sakura

相关问题