C#Directory.GetFiles具有扩展名和大小过滤器

时间:2015-09-29 08:56:47

标签: c#

我想计算具有特定扩展名且大小超过X kb的文件夹中的文件数。有人可以帮忙解决这个问题吗?

我可以做扩展部分:

Directory.GetFiles("c:\\temp\\", "*.txt", SearchOption.TopDirectoryOnly).Length

2 个答案:

答案 0 :(得分:6)

您可以通过在目录中的每个文件中创建FileInfo,然后查询它的FileInfo.Length属性来执行此操作:

var count = Directory.EnumerateFiles(
                        @"c:\temp\", "*.txt", SearchOption.TopDirectoryOnly)
                        .Count(file => new FileInfo(file).Length / 1024 >= size);

答案 1 :(得分:3)

  

计算具有特定扩展名的文件夹中的文件数   高于X kb的

您可以使用DirectoryInfo.EnumerateFilesFileInfo.Length

double minKbFileSize = 500;  
var tempDir = new DirectoryInfo("c:\\temp\\"); 
int countLargeFiles = tempDir.EnumerateFiles("*.txt", SearchOption.TopDirectoryOnly)
   .Count(file => file.Length / 1024d > minKbFileSize);

DirectoryInfo.EnumerateFiles会返回IEnumerable<FileInfo>,因此如果您使用Directo.EnumerateFiles,则无需从中创建实例。

  

EnumerateFilesGetFiles方法的不同之处如下:   你使用EnumerateFiles,你可以开始枚举集合   返回整个集合之前的FileInfo个对象。当你   使用GetFiles,您必须等待整个FileInfo数组   在可以访问数组之前要返回的对象。因此,   当您使用许多文件和目录时,EnumerateFiles   可以更有效率。

当我使用LINQ过滤时,我总是使用EnumerateFiles