C# 使用c GetFiles Length,但仅计算文件名中具有一定数量字符的文件
所以我用的是简单的C# 使用c GetFiles Length,但仅计算文件名中具有一定数量字符的文件,c#,linq,getfiles,C#,Linq,Getfiles,所以我用的是简单的 ImgFilesCount = ImgDirInfo.GetFiles("*.jpg").Length; 计算一个目录中有多少个文件。但我需要它只计算文件名中正好有26个字符的文件。我试过了 ImgFilesCount = ImgDirInfo.GetFiles("?????????????????????????.jpg").Length; 但它不起作用。是执行foreach循环并检查每个文件名和递增计数器的唯一选项吗?我有一种感觉,linq可能可以用.Where语句来
ImgFilesCount = ImgDirInfo.GetFiles("*.jpg").Length;
计算一个目录中有多少个文件。但我需要它只计算文件名中正好有26个字符的文件。我试过了
ImgFilesCount = ImgDirInfo.GetFiles("?????????????????????????.jpg").Length;
但它不起作用。是执行foreach循环并检查每个文件名和递增计数器的唯一选项吗?我有一种感觉,linq可能可以用.Where语句来实现这一点,但我不知道任何linq。可能
int count = ImgDirInfo.EnumerateFiles("*.jpg").Count(f => f.Name.Length == 26);
更高效,因为它不需要在开始处理之前将所有文件加载到内存中
使用EnumerateFiles时,可以在返回整个集合之前开始枚举FileInfo对象集合。
使用GetFiles时,必须等待返回整个FileInfo对象数组,然后才能访问该数组。
像这样的
string[] files = Directory
.EnumerateFiles(@"c:\Users\x074\Downloads" , "*.jpg" , SearchOption.AllDirectories )
.Where( path => Path.GetFileName(path).Length > 20 )
.ToArray()
;
.Wherefname=>conditionfname.LengthGood关于枚举文件的要点。只是一个小小的提示:Count是否会加载所有文件,从而使枚举文件的流性质变得无关紧要?@IlyaIvanov哦,不。这就是迭代器的全部优点。Count扩展名方法在计数过程中使用查询。@YoryeNathan因此对硬盘进行了更多调用?@YoryeNathan:在这种情况下,Ilya是对的,因为Count需要使用给定的搜索模式枚举所有文件。因此,一般来说,如果您只需要文件名,最好使用Directory.EnumerateFiles。@IlyaIvanov它是性能vs内存。我通常喜欢表演,但这要视情况而定。这只是要指出,在某些情况下,EnumerateFiles方法更合适,即使它最终使用了查询。如果长度大于20,则正好26个字符有点不同。
string[] files = Directory
.EnumerateFiles(@"c:\Users\x074\Downloads" , "*.jpg" , SearchOption.AllDirectories )
.Where( path => Path.GetFileName(path).Length > 20 )
.ToArray()
;