【问题标题】:Go through every Folder with GetDirectory使用 GetDirectory 遍历每个文件夹
【发布时间】:2017-03-08 04:48:42
【问题描述】:

这是我的代码:

private static bool checkifDirectoryContainsFilesWithSpecifiedExtention(string path, string fileExestention) //Like C:\\smth, *.html
    {          
            foreach (string f in Directory.GetFiles(path,fileExestention))
            {
                return true;
            }
            foreach (string d in Directory.GetDirectories(path))
            {
                 return checkifDirectoryContainsFilesWithSpecifiedExtention(d,fileExestention);
            }
            return false;
    }

在此函数中,程序返回具有指定扩展名的每个文件但是如果我在最后一个文件夹中仅包含一个具有指定扩展名的文件,则该函数返回 false,因为它存在所以没有意义

我的问题是为什么会这样......

试试看。我真的找不到错误。

【问题讨论】:

  • 你能展示一下你是如何调用这样的函数的吗?

标签: c# file recursion directory


【解决方案1】:

将其转换为 LINQ 查询

    private static bool CheckifDirectoryContainsFilesWithSpecifiedExtention(string path, string fileExestention)
        //Like C:\\smth, *.html
    {
        return Directory.GetFiles(path, fileExestention).Any() ||
               Directory.GetDirectories(path)
                        .Select(d => CheckifDirectoryContainsFilesWithSpecifiedExtention(d, fileExestention))
                        .FirstOrDefault();
    }

使用 *.exe 作为掩码在几个调试文件夹上进行了尝试,它返回 true。它也遍历子文件夹。不确定最后一个文件夹中的一个文件是什么意思。

看看它是否适合你。

【讨论】:

    【解决方案2】:

    问题在于 foreach(Directory.GetDirectories(path) 中的字符串 d)循环中的“返回”。它只会检查每个级别的第一个目录。你需要这样的东西(不好,但保持你的风格/格式)

    bool ok = false;
    foreach (string d in Directory.GetDirectories(path))
    {
        ok = ok || checkifDirectoryContainsFilesWithSpecifiedExtention(d,
           fileExestention);
    }
    return ok;
    

    更好的是,使用 Marc 提供的 linq。

    【讨论】:

      【解决方案3】:

      这对我有用

      using System;
      using System.Collections.Generic;
      using System.IO;
      using System.Linq;
      using System.Text;
      using System.Threading.Tasks;
      
      namespace StackOverflowSnippets
      {
          class Program
          {
              static void Main(string[] args)
              {
                  String path = @"C:\smth"; String pattern = "*.html";
      
                  Console.WriteLine("__" + checkifDirectoryContainsFilesWithSpecifiedExtention(path, pattern));
      
                  Console.ReadLine();
              }
      
              private static bool checkifDirectoryContainsFilesWithSpecifiedExtention(string path, string fileExestention) //Like C:\\smth, *.html
              {
                  foreach (string f in Directory.GetFiles(path, fileExestention))
                  {
                      return true;
                  }
                  foreach (string d in Directory.GetDirectories(path))
                  {
                      if (checkifDirectoryContainsFilesWithSpecifiedExtention(Path.Combine(path, d), fileExestention))
                      {
                          return true;
                      }
                  }
      
                  return false;
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2021-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 2018-12-13
        • 1970-01-01
        相关资源
        最近更新 更多