按特定顺序读取文件?

时间:2012-07-26 08:20:48

标签: c# .net file

我想从不同的文件夹中读取很多文件。现在我问自己什么是最聪明的方式。现在我正在使用

    DirectoryInfo directory = new DirectoryInfo(myPath);
    FileInfo[] files = directory.GetFiles("*.txt");

所以我有一个包含所有文件的列表,我可以遍历它们(逐个阅读)。

这样好吗?有没有办法重新排序列表,以便我始终最顶层的最旧文件。这可能是一个很好的想法,因为我想开始阅读最旧的文件,最后是最新的文件。有什么想法吗?

3 个答案:

答案 0 :(得分:6)

List<FileInfo> files = directory
    .GetFiles("*.txt")
    .OrderBy(f => f.LastWriteTime)
    .ToList();

有关您可以订购的完整字段列表,请参阅FileInfoFileSystemInfo

这是VB.NET中的example

答案 1 :(得分:4)

您可以从目录中获取文件,然后按创建日期对其进行排序:

DirectoryInfo info = new DirectoryInfo(myPath);
FileInfo[] files = info.GetFiles("*.txt").OrderBy(f => f.CreationTime).ToArray();

现在files数组包含按创建日期排序的文件。通过改变OrderBy中的lambda表达式,您可以按任何方式对它们进行排序:

  • 按上次修改时间:OrderBy(f => f.LastWriteTime)
  • 按名称:OrderBy(f => f.Name)

..等等。您的输出也 不是数组。它也可以转换为List<FileInfo>,将最终ToArray()替换为ToList()

如果您需要按相反的顺序排序,只需使用OrderByDescending(...)即可获得所需的结果。

答案 2 :(得分:3)

在您的代码之后,执行以下操作:

FileInfo[] orderedFiles = files.OrderBy(x => x.CreationTime).ToArray();

..或者更好的是,首先将它们排序:

DirectoryInfo directory = new DirectoryInfo(myPath);
FileInfo[] files = directory.GetFiles("*.txt")
                   .OrderBy(x => x.CreationTime).ToArray();