使用 LINQ 排序以查找最旧的文件时从列表中过滤文件夹

Filtering folders from a list when using LINQ to sort to find the oldest file

我目前正在使用下面的代码来获取给定路径中最旧的文件。最近在该路径中创建了一个文件夹,该文件夹很快成为最旧的“文件”。如何修改 linq 以过滤目录并仅报告文件?

var fileInfo = new DirectoryInfo(path).GetFileSystemInfos();
var oldestFile = fileInfo.OrderBy(fi => fi.CreationTime).FirstOrDefault();

您只能查找如下文件:

var oldestFile = fileInfo.Where(fi => fi is FileInfo)
                         .OrderBy(fi => fi.CreationTime)
                         .FirstOrDefault();

方法 GetFileSystemInfos returns System.IO.FileSystemInfo 个对象的数组。这个class是FileInfoDirectoryInfo对象的基础class,请看here。正如前面提到的link:

A FileSystemInfo object can represent either a file or a directory, thus serving as the basis for FileInfo or DirectoryInfo objects

所以通过传递谓词

fi => fi is FileInfo

对于上面的 Where 方法,您只获得代表文件的对象。

GetFileSystemInfos 将显示所有文件和目录。如果你只想过滤文件,你可以使用 GetFiles 而不是 GetFileSystemInfos.

示例:

    var fileInfo = new DirectoryInfo(path).GetFiles();
    var oldestFile = fileInfo.OrderBy(fi => fi.CreationTime).FirstOrDefault();

注意: GetFilesGetFileSystemInfos 性能更好,因为这不会加载内存中的所有文件和文件夹。 因此,如果您只想过滤文件,最好使用 GetFiles 而不是 GetFileSystemInfos