我想从目录中选择以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。我该怎么做?
答案 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();