选择以"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。我该怎么做呢?
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();