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

C# 在C中选择以“NVH”开头而不是以“NVHE”开头的文件名,c#,regex,C#,Regex,我只想从目录中选择以NVH前缀开头的文件名。它不应该从同一目录中选择以NVHE开头的文件名。我该怎么做 我试过一些东西。它们如下。它们是 //This will store all file names beginning with NVH prefix and NVHE prefix in array string[] files11 = Directory.GetFiles(moduleDir, "NVH*.*") .Sele

我只想从目录中选择以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。我怎么做呢?

既然您已经在使用LINQ,为什么不添加一个Where to filter

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:\…

既然您已经在使用LINQ,为什么不添加Where to filter

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:\…

您可以添加:

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


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

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


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

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

或者,您可以使用:

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

Directory.EnumerateFiles(moduleDir)
         .Where(path=>
            {
               var file = Path.GetFileName(path);
               return file.StartsWith("NVH") && !file.StartsWith("NVHE")
            });
您还可以使用现有代码并通过以下方式筛选第一个集合:

var result = files11.Except(files12)
Directory.GetFiles:

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

或者,您可以使用:

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

Directory.EnumerateFiles(moduleDir)
         .Where(path=>
            {
               var file = Path.GetFileName(path);
               return file.StartsWith("NVH") && !file.StartsWith("NVHE")
            });
您还可以使用现有代码并通过以下方式筛选第一个集合:

var result = files11.Except(files12)


我会用。。。path.StartsWithNVHE,StringComparison.OrdinalIgnoreCase,因为文件在Windows上不区分大小写。我会使用。。。path.StartsWithNVHE、StringComparison.OrdinalIgnoreCase,因为文件在Windows上不区分大小写。