3

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

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

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

这样好吗?有没有办法重新排序列表,以便我始终将最旧的文件放在顶部。这可能是一个好主意,因为我想开始阅读最旧的文件,最后是最新的。有任何想法吗?

4

3 回答 3

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

请参阅FileInfoFileSystemInfo以获取您可以订购的字段的完整列表。

这是VB.NET 中的一个示例

于 2012-07-26T08:23:23.140 回答
4

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

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

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

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

..等等。您的输出也不必是数组。List<FileInfo>它也可以通过将 final 替换为 a 来转换为ToArray()a ToList()

如果您需要以相反的顺序排序,您可以简单地使用OrderByDescending(...)来获得所需的结果。

于 2012-07-26T08:29:49.080 回答
3

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

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

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

DirectoryInfo directory = new DirectoryInfo(myPath);
FileInfo[] files = directory.GetFiles("*.txt")
                   .OrderBy(x => x.CreationTime).ToArray();
于 2012-07-26T08:28:28.747 回答