使用c#GetFiles Length但只计算文件名中包含一定量字符的文件

时间:2013-05-17 23:49:54

标签: c# linq getfiles

所以我正在使用简单的

ImgFilesCount = ImgDirInfo.GetFiles("*.jpg").Length;

找出目录中有多少文件。但我需要它只计算文件名中包含正好26个字符的文件。我试过了

ImgFilesCount = ImgDirInfo.GetFiles("?????????????????????????.jpg").Length;

但它没有用。是唯一一个做foreach循环并检查每个文件名并递增计数器的选项吗?我有一种感觉,linq可能会用.Where语句来做这件事,但我不知道任何Linq。

3 个答案:

答案 0 :(得分:5)

也许

int count = ImgDirInfo.EnumerateFiles("*.jpg").Count(f => f.Name.Length == 26);

EnumerateFiles更有效率,因为它不需要在开始处理之前将所有文件加载到内存中。

  • 使用EnumerateFiles时,可以在返回整个集合之前开始枚举FileInfo对象的集合。
  • 使用GetFiles时,必须等待返回整个FileInfo对象数组,然后才能访问该数组。

答案 1 :(得分:3)

ImgFilesCount = ImgDirInfo.GetFiles("*.jpg")
                          .Where(file => file.Name.Length == 26)
                          .Count();

答案 2 :(得分:0)

这样的东西?

        string[] files = Directory
                         .EnumerateFiles(@"c:\Users\x074\Downloads" , "*.jpg" , SearchOption.AllDirectories )
                         .Where( path => Path.GetFileName(path).Length > 20 )
                         .ToArray()
                         ;