使用 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是FileInfo
和DirectoryInfo
对象的基础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();
注意:
GetFiles
比 GetFileSystemInfos
性能更好,因为这不会加载内存中的所有文件和文件夹。
因此,如果您只想过滤文件,最好使用 GetFiles
而不是 GetFileSystemInfos
。
我目前正在使用下面的代码来获取给定路径中最旧的文件。最近在该路径中创建了一个文件夹,该文件夹很快成为最旧的“文件”。如何修改 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是FileInfo
和DirectoryInfo
对象的基础class,请看here。正如前面提到的link:
A
FileSystemInfo
object can represent either a file or a directory, thus serving as the basis forFileInfo
orDirectoryInfo
objects
所以通过传递谓词
fi => fi is FileInfo
对于上面的 Where
方法,您只获得代表文件的对象。
GetFileSystemInfos
将显示所有文件和目录。如果你只想过滤文件,你可以使用 GetFiles
而不是 GetFileSystemInfos
.
示例:
var fileInfo = new DirectoryInfo(path).GetFiles();
var oldestFile = fileInfo.OrderBy(fi => fi.CreationTime).FirstOrDefault();
注意:
GetFiles
比 GetFileSystemInfos
性能更好,因为这不会加载内存中的所有文件和文件夹。
因此,如果您只想过滤文件,最好使用 GetFiles
而不是 GetFileSystemInfos
。