在C#中选择以“NVH”开头而不是“NVHE”的文件名

时间:2014-05-20 10:09:47

标签: c# regex

我想从目录中选择以NVH Prefix开头的文件名。不应该从同一目录中选择以NVHE开头的文件名。我该怎么办?

我尝试过某些事情。他们如下:他们是

//This will store all file names beginning with NVH prefix and NVHE prefix in array
string[] files11 = Directory.GetFiles(moduleDir, "NVH*.*")
                                 .Select(path => Path.GetFileName(path))
                                 .ToArray();

//This will store all file names beginning with NVHE prefix in array only
string[] files12 = Directory.GetFiles(moduleDir, "NVHE*.*")
                          .Select(path => Path.GetFileName(path))
                                 .ToArray();

现在我希望文件名仅以NVH开头,而不是NVHE。我该怎么做?

4 个答案:

答案 0 :(得分:3)

Directory.GetFiles does not support regular expressions

  

要匹配路径中文件名称的搜索字符串。这个   参数可以包含有效文字路径和通配符的组合   (*和?)字符(请参阅备注),但不支持常规字符   表达式。

另外,您可以使用Directory.EnumerateFiles

Directory.EnumerateFiles(moduleDir)
         .Select(Path.GetFileName)
         .Where(file=>file.StartsWith("NVH") && !file.StartsWith("NVHE"));

如果要保留文件的完整路径:

Directory.EnumerateFiles(moduleDir)
         .Where(path=>
            {
               var file = Path.GetFileName(path);
               return file.StartsWith("NVH") && !file.StartsWith("NVHE")
            });

您还可以使用现有代码并以这种方式过滤第一个集合:

var result = files11.Except(files12)

答案 1 :(得分:1)

因为您正在使用LINQ,为什么不添加Where来过滤...

string[] files11 = Directory.GetFiles(moduleDir, "NVH*.*")//get all files starting with NVH
                             .Select(path => Path.GetFileName(path))//convert the full paths to filenames only (inc. extensions)
                             .Where(path => !path.StartsWith("NVHE"))//filter out files that start with NVHE
                             .ToArray();

重要的是要注意Where子句必须在路径转换之后(即Select部分),否则它将尝试匹配完整文件路径的开头(例如{{ 1}})

答案 2 :(得分:1)

您可以添加:

.Where(path => !path.StartsWith("NVHE"))


string[] files11 = Directory.GetFiles(moduleDir, "NVH*.*")
                             .Select(path => Path.GetFileName(path))
                             .Where(path => !path.StartsWith("NVHE"))
                             .ToArray();

答案 3 :(得分:1)

 files11 = files11.Except(files12).ToArray();