选择以"NVH"开头的文件名而不是“nvhe”;在c#

本文关键字:quot nvhe 文件名 NVH 开头 选择 | 更新日期: 2023-09-27 18:04:07

我想只从目录中选择以NVH前缀开头的文件名。它不应该从同一目录中选择以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。我该怎么做呢?

选择以"NVH"开头的文件名而不是“nvhe”;在c#

Directory.GetFiles不支持正则表达式:

要与path中的文件名匹配的搜索字符串。这参数可以包含有效的文字路径和通配符的组合(*和?)字符(参见备注),但不支持正则表达式。

在alternative中,您可以使用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)

您可以添加:

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

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

既然你已经在使用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部分),否则它将尝试匹配完整文件路径的开始(例如"C:'...")

AND

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