【问题标题】:Search in all folders of a subfolder for the presence of a specified file在子文件夹的所有文件夹中搜索指定文件的存在
【发布时间】:2020-06-15 18:45:01
【问题描述】:

我有一个包含一堆子目录的主目录,每个子目录都应该有一个 app.config 文件,我想验证它。此 app.config 文件可以位于给定子目录的任何位置。 在我下面的实现中,我可以检查这个配置文件是否立即在给定的子目录中(例如,如果子目录是“文件夹”,我将检查 app.confg 是否在路径 folder\app.config 中可用)但是它无法检查 app.config 是否位于给定子目录的任何位置。

从某种意义上说,app.config 文件可以位于给定初始子目录的子目录中。基本上在给定子目录中的任何地方

有什么方法可以实现这种行为吗?

private void ValidateFiles(string path)
        {



            string[] filesindirectory = Directory.GetDirectories(path);
            foreach (var subDir in filesindirectory)
            {
                string pathToConfigFile = Path.Combine(subDir, "app.config");
                if (File.Exists(pathToConfigFile))
                {

                }

                else
                {

                }
            }
        } 

【问题讨论】:

标签: c# .net file io path


【解决方案1】:

您可以使用Directory.GetFiles 方法在文件夹中查找您的文件,并在SearchOption 参数中传递SearchOption.AllDirectories 以在所有子目录中搜索。

以下是代码示例供参考:

    private void ValidateFiles(string path)
    {
        var filesindirectory = Directory.GetFiles(path, "app.config", SearchOption.AllDirectories);
        foreach (var file in filesindirectory)
        {
            Console.WriteLine(file);
        }
    }

在 filesindirectory 变量中,您现在将拥有所有文件名(在我们的例子中是 app.config)以及路径。
更多参考:Microsoft Doc

【讨论】:

  • 从这个答案中我可以获得包含该文件的现有文件夹的所有路径,有什么方法可以实现它以便我可以实现,以便所有目录的名称没有可以打印配置文件
  • private static void Process(string path) { var filesindirectory = new List(Directory.GetFiles(path, ".", SearchOption.AllDirectories).Where( x => Path.GetExtension(x) != ".config")); var directoryNames = new HashSet(); foreach (var file in filesindirectory) { directoryNames.Add(Path.GetDirectoryName(file)); } foreach (var dir in directoryNames) { Console.WriteLine(dir); } }
【解决方案2】:
var LstfileDirectory = Directory.GetFiles(path, "app.config",
    SearchOption.AllDirectories)
    .ToList();

LstfileDirectory.ForEach(Item => Console.WriteLine(Item)); 

【讨论】:

    【解决方案3】:
    1. 如果您的路径包含子目录中的子目录,则使用递归。
    private void ValidateFiles(string path)
            {
                DirSearch(path);
            } 
    
    
    private void DirSearch(string sDir)
            {
                List<String> files = new List<String>();
                try
                {
                    foreach (string f in Directory.GetFiles(sDir))
                    {
                    string pathToConfigFile = Path.Combine(sDir, "app.config");
                    if (File.Exists(pathToConfigFile))
                    {
    
                    }
                    else
                    {
    
                    }
    
                    }
                    foreach (string d in Directory.GetDirectories(sDir))
                    {
                        files.AddRange(DirSearch(d));
                    }
                }
                catch (System.Exception excpt)
                {
                    MessageBox.Show(excpt.Message);
                }
    
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 2017-07-29
      • 2020-07-24
      • 1970-01-01
      • 2015-08-04
      相关资源
      最近更新 更多