如何解决使用 LINQ 排序以查找最旧的文件时从列表中过滤文件夹
我目前正在使用下面的代码来获取给定路径中最旧的文件。最近在该路径中创建了一个文件夹,该文件夹很快成为最旧的“文件”。如何修改 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
返回一个 System.IO.FileSystemInfo
对象数组。这个类是FileInfo
和DirectoryInfo
对象的基类,请看here。正如上一个链接中提到的:
FileSystemInfo
对象可以表示文件或目录,
从而作为 FileInfo
或 DirectoryInfo
对象
所以通过传递谓词
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
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。