【问题标题】:DirectoryInfo GetFiles TOP numberDirectoryInfo GetFiles TOP 编号
【发布时间】:2011-05-05 14:38:46
【问题描述】:

我只想从一个目录返回 10 个文件。这可能吗?

DirectoryInfo d = new DirectoryInfo(HttpContext.Current.Server.MapPath("~/xml"));

FileInfo[] files = d.GetFiles("*.xml");

这种方式返回所有个XML文件,但我只想得到前十个。

【问题讨论】:

  • GetFiles().Take(10) 的使用与 GetFile() 一样慢(并且在内存方面)。使用 .Net 4.0 的 EnumerateFiles() 来节省时间和内存。

标签: c# .net fileinfo


【解决方案1】:

您可以添加扩展方法 Take(10) 以仅抓取前 10 个文件。

var d = new DirectoryInfo(HttpContext.Current.Server.MapPath("~/xml"));
var files = d.GetFiles("*.xml").OrderByDescending(fi=>fi.LastWriteTime).Take(10);

【讨论】:

  • 非常好。我会正确的。如何按更改日期订购?
  • @Jake 小错误:Take 返回一个IEnumerable<FileInfo>,然后你将它分配给FileInfo[]
  • @Beginner 你可以做 d.GetFiles().Take(3).OrderBy( r => r.CreationTime).ToArray();为orderBy
  • @Beginner 将.OrderBy(fi=>fi.LastWriteTime).OrderByDescending(fi=>fi.LastWriteTime) 放在.Take(10) 之前。假设您想要 10 个最近更改的文件而不是 10 个随机文件,您需要先排序,然后使用 take 限制数量。所以不是@anish推荐的
  • SHOWWWWWWWWWWWWWWWW .OrderByDescending(fi=>fi.LastWriteTime)
【解决方案2】:

如果您使用的是 .NET4,那么您可能应该使用 EnumerateFiles 以及 Take 扩展方法:

var d = new DirectoryInfo(HttpContext.Current.Server.MapPath("~/xml"));
FileInfo[] files = d.EnumerateFiles("*.xml").Take(10).ToArray();

【讨论】:

  • 这是正确的解决方案。 Jake Pearson 目前标记为正确的解决方案使用 GetFiles,它返回一个数组类型,这意味着所有文件都将在您可以应用 LINQ 语句 Take 之前实现。使用 EnumerateFiles 返回一个 IEnumerable,它只会遍历 Take 应用的文件数量...如果您不注意返回类型并注意它们的行为方式,LINQ 可能会非常危险:)
【解决方案3】:

你必须和杰克提到的一样,但不是FileInfo[] files

      DirectoryInfo d = new DirectoryInfo("~/xml");
      IEnumerable< FileInfo> files = d.GetFiles().Take(10);

                         OR

     DirectoryInfo d = new DirectoryInfo("~/xml");
      FileInfo[] files = d.GetFiles().Take(10).ToArray();

【讨论】:

    【解决方案4】:
      var directory = new DirectoryInfo(Tab16_mainPath);
    
    
      var myFile = (from f in directory.GetFiles().Take(3)
                    orderby f.LastWriteTime descending
                    select f).ToArray();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 2020-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多