从目录中获取x个最新文件

本文关键字:最新 文件 获取 | 更新日期: 2023-09-27 18:01:51

我想实现一个函数,接收Directory作为参数,integer表示文件数量,并从这个Direttory返回最新的文件

所以我有这个函数:

    public static IEnumerable<string> EnumerateDirectories(string parentDirectory, string searchPattern, SearchOption searchOpt, int numberOfFiles)
    {
        try
        {
            var directories = Enumerable.Empty<string>();
            if (searchOpt == SearchOption.AllDirectories)
            {
                directories = Directory.EnumerateDirectories(parentDirectory).SelectMany(x => EnumerateDirectories(x, searchPattern, searchOpt));
            }
            return directories.Concat(Directory.EnumerateDirectories(parentDirectory, searchPattern));
        }
        catch (UnauthorizedAccessException)
        {
            return Enumerable.Empty<string>();
        }
    }

是否可以使用此Linq:

var directory = new DirectoryInfo("C:''MyDirectory");
var myFile = (from f in directory.GetFiles()
             orderby f.LastWriteTime descending
             select f).First();
  1. 我可以控制返回文件的数量还是只返回一次?
  2. 如果我的文件夹中只有2个文件,我想要3个最新的文件,会发生什么?

从目录中获取x个最新文件

您可以使用Enumerable.Take:

var myFiles = (from f in directory.GetFiles()
              orderby f.LastWriteTime descending
              select f).Take(numberOfFiles);

或方法语法:

myFiles = directory.GetFiles().OrderByDescending(f => f.LastWriteTime).Take(numberOfFiles);

这将返回尽可能多的文件(最多。numberOfFiles)。如果你想要三个,但只有两个,你就得到两个。

我可以控制返回文件的数量还是只返回一次?

是的。使用Enumerable.Take

如果我的文件夹中只有2个文件,而我想要3个最新的,会发生什么

文件?

使用.Take(3),它将只返回2个文件。不会有例外。

var myFile = (from f in directory.GetFiles()
             orderby f.LastWriteTime descending
             select f).Take(3);

或者使用方法语法:

var myFile = directory.GetFiles()
                       .OrderByDescending(f => f.LastWriteTime)
                       .Take(3);