我想计算具有特定扩展名且大小超过X kb的文件夹中的文件数。有人可以帮忙解决这个问题吗?
我可以做扩展部分:
Directory.GetFiles("c:\\temp\\", "*.txt", SearchOption.TopDirectoryOnly).Length
答案 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.EnumerateFiles
和FileInfo.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
,则无需从中创建实例。
EnumerateFiles
和GetFiles
方法的不同之处如下: 你使用EnumerateFiles
,你可以开始枚举集合 返回整个集合之前的FileInfo
个对象。当你 使用GetFiles
,您必须等待整个FileInfo
数组 在可以访问数组之前要返回的对象。因此, 当您使用许多文件和目录时,EnumerateFiles
可以更有效率。
当我使用LINQ过滤时,我总是使用EnumerateFiles
。