【问题标题】:Find First File in a Branching Directory在分支目录中查找第一个文件
【发布时间】:2015-01-30 15:08:53
【问题描述】:

我试图在目录树中找到第一个 .dcm 然后获取第一个完整路径 (a/a/a/123.dcm) 。但是忽略没有找到 ie .dcm 的目录。

示例:

a/a/a/123.dcm
a/a/a/1234.dcm
a/a/a/12345.dcm

a/a/b/23.dcm
a/a/b/234.dcm
a/a/b/2345.dcm

a/a/c/23.dcm
a/a/c/234.dcm
a/a/c/2345.dcm

答案应该是:a/a/a/123.dcma/a/b/23.dcma/a/c/23.dcm

我试过了:

var files = Directory.GetFiles(inputDir, "*.*", SearchOption.AllDirectories)
                         .Where(s => s.EndsWith(".dcm")).ToArray();
var dir = Directory.GetDirectories(inputDir, "*.*", SearchOption.AllDirectories).ToArray();

var biggest = files.First();

foreach (var item in dir)
{
   DirectoryInfo di = new DirectoryInfo(item);
   var q = from i in di.GetFiles("*.dcm", SearchOption.AllDirectories)
           select i.Name;
   var qq = q.First();

   foreach (var items in qq)
   {
      Console.WriteLine(items);
   }
}

但是我得到的是五个目录的答案。答:

a/a/a/123.dcm
a/a/a/123.dcm
a/a/a/123.dcm
a/a/b/23.dcm 
a/a/c/23.dcm

我只是想知道是否有更简单的方法可以使用 LINQ 或其他方法来做到这一点?非常感谢你的帮助。干杯。

【问题讨论】:

  • 你的意思是排序后的“第一”吗?如果有,排序标准是什么?
  • 标准是否以 ie: .dcm 结尾

标签: c# linq directory getfiles


【解决方案1】:

这是一个 LINQ 版本:

        var inputDir = @"c:\\temp";

        var files = Directory
            .EnumerateFiles(inputDir, "*.dcm", SearchOption.AllDirectories)
            .Select(f => new FileInfo(f))
            .GroupBy(f => f.Directory.FullName, d => d, (d, f) => new { Directory = d, FirstFile = f.ToList().First() })
            .ToList();

        files.ForEach(f => Console.WriteLine("{0} {1}", f.Directory, f.FirstFile));

【讨论】:

  • 忘了说我在 3.5 没有 directory.enumeratefiles
  • 对于 3.5,只需将 EnumerateFiles 更改为 GetFiles
  • 为答案干杯...如果我只想要第一个文件而不想要目录怎么办?
  • 如果不需要目录,只需将group by projection改为new { FirstFile = f.ToList().First() }
猜你喜欢
  • 2011-10-29
  • 2013-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-04
  • 1970-01-01
  • 2021-03-06
相关资源
最近更新 更多