【问题标题】:How to get files from exact subdirectories如何从确切的子目录中获取文件
【发布时间】:2012-12-19 13:42:58
【问题描述】:

我已经设法从“根”文件夹子目录中获取文件,但我也从这些子目录中获取文件,但我不想这样做。

示例:RootDirectory>Subdirectories (wanted files)>directories2 (unwanted files)

我用过这段代码:

public void ReadDirectoryContent() 
{
  var s1 = Directory.GetFiles(RootDirectory, "*", SearchOption.AllDirectories);
  {
  for (int i = 0; i <= s1.Length - 1; i++)
  FileInfo f = new FileInfo(s1[i]); 
  . . . etc
  }
}

【问题讨论】:

  • 你也想排除一些目录吗?
  • 不,我想要所有目录

标签: c# getfiles


【解决方案1】:

试试这个:

var filesInDirectSubDirs = Directory.GetDirectories(RootDirectory)
    .SelectMany(d=>Directory.GetFiles(d));

foreach(var file in filesInDirectSubDirs)
{
    // Do something with the file
    var fi = new FileInfo(file);
    ProcessFile(fi);
}

想法是首先选择第一级子目录,然后使用Enumerable.SelectMany方法“聚合”所有文件

【讨论】:

  • 好吧,我试过了,但使用 .Count 方法后,我无法获取文件长度
  • SelectMany 正在返回一个 IEnumerable&lt;T&gt;,它不提供 Length 属性。您可以使用简单的foreach 构造来代替for 循环。检查我编辑的代码
  • 在那之后我遇到了数组问题。你有什么建议吗?我编辑/添加了我的代码。
  • 您遇到了什么问题?请注意,使用 SelectMany 时没有更多的数组,而是一个可枚举的。这就是为什么 foreach 代替 foreach 发挥作用的原因
  • 我在程序的另一部分遇到了数组问题,我也使用了这些值。感谢您的所有帮助!
【解决方案2】:

你必须把SearchOption.AllDirectories改成SearchOption.TopDirectoryOnly,因为第一个意味着它从当前目录和所有子目录中获取文件。

编辑:

操作要在直接子子目录中搜索,而不是根目录 目录。

public void ReadDirectoryContent() 
{
    var subdirectories = Directory.GetDirectories(RootDirectory);
    List<string> files = new List<string>();

    for(int i = 0; i < subdirectories.Length; i++)
       files.Concat(Directory.GetFiles(subdirectories[i], "*", SearchOption.TopDirectoryOnly));
}

【讨论】:

  • op想要在直接子子目录中搜索,而不是根目录)
  • 我试过你的建议,但我得到的只是子目录长度(数字)。我想要文件长度,在子目录中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
  • 2017-05-15
  • 2019-08-14
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多