【问题标题】:Check and list sub-folders based on contents of folders C# Winforms根据文件夹的内容检查并列出子文件夹 C# Winforms
【发布时间】:2019-01-15 17:10:33
【问题描述】:

我有一个名为 "C:\Foo\" 的文件夹,在该文件夹中,有文件夹 "Bar""Bob""Bill""BAM"。在每个文件夹中,都有一个 bundlea 文件。

我想遍历所有 "C:\Foo\" 子文件夹并根据其内容或缺少的内容返回文件夹名称:

foreach (folder in folders)
{
    if (folder !contains "someFile.pdf")
    {
        listBox1.Items.Add(folder);
    }

这样listBox1 将填满“Bob”、“BAM”和“Bill”,因为它们没有 someFile.pdf。所以我可以看到 Bob、BAM 和 Bill 在他们的文件夹中都没有 someFile.pdf。

我检查了一下,发现代码可以做类似的事情,但没有根据其内容填充子文件夹列表。

【问题讨论】:

标签: c# winforms


【解决方案1】:

您需要使用FileSystemObject 来遍历您的文件夹和文件。

string[] files = 
    Directory.GetFiles("C:\Foo\","*", SearchOption.AllDirectories);

详情请参考MDSN:Directory.GetFiles Method

或者按照@BradleyDotNet 的建议(谢谢),使用EnumerateFiles

详见文档:Directory.EnumerateFiles

string sourceDirectory = @"C:\foo";

    try
    {
        var allFiles
          = Directory.EnumerateFiles(sourceDirectory, "*", SearchOption.AllDirectories);

        foreach (string currentFile in allFiles)
        {
            string fileName = currentFile.Substring(sourceDirectory.Length + 1);
        }
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
    }

【讨论】:

  • 或者更好,EnumerateFiles 如果有很多的话
  • @BradleyDotNET 有什么区别?
  • @TnD_Guy GetFiles 将所有文件作为数组返回,因此它实际上一口气读取了整个目录。 EnumerateFiles 返回一个 IEnumerable 并在文件系统被消耗时懒惰地读取它。在这种情况下,一旦找到文件,它将允许提前终止读取。
猜你喜欢
  • 2016-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
  • 2011-07-23
  • 1970-01-01
  • 2014-12-27
相关资源
最近更新 更多