【问题标题】:Displaying name of directory or directories which do not have a specified file显示没有指定文件的目录或目录的名称
【发布时间】:2020-06-17 02:40:19
【问题描述】:

我有一个主文件夹,其中有一组子目录。这些子目录中的每一个都应该有一个名为 app.config 的文件。我已经编写了一个方法,它将扫描目录并获取包含该文件的所有文件夹的路径,但我想在控制台中写入名称没有这个文件的子目录

是否有可能通过此实现获得此行为?

我的代码如下

private void ValidateFiles(string path)
{
    var filesindirectory = new List<string>(Directory
      .GetFiles(path, "app.config", SearchOption.AllDirectories));

    foreach (var file in filesindirectory)
    {
        Console.WriteLine(file);
    }
}

【问题讨论】:

    标签: c# .net file path


    【解决方案1】:

    你可以试试Linq:我们想要所有目录,这样它们就没有app.config文件:

     using System.IO;
     using System.Linq;
    
     ...
    
     List<string> dirs = Directory
        .EnumerateDirectories(path, "*", SearchOption.AllDirectories)
        .Where(dir => !File.Exists(Path.Combine(dir, "app.config")))
        .ToList(); // If we want to have a list of such directories
    

    如果你只想写目录:

     var dirs = Directory
        .EnumerateDirectories(path, "*", SearchOption.AllDirectories)
        .Where(dir => !File.Exists(Path.Combine(dir, "app.config")));
    
     foreach (string directory in dirs)
       Console.WriteLine(directory);
    

    编辑:让我们达成协议。我们有根目录(path)和子目录,可以有app.config文件:

        C: 
          \Root # == path
            \SubDir1
              app.config
            \SubDir2
              app.config
              \SubSubDir2_1
                app.config
              \SubSubDir2_2
            \SubDir3
              readme.txt
              \SubSubDir3_1
                settings.xml 
            \SubDir4
              \SubSubDir4_1
                app.config
    

    上面的代码返回所有没有app.config的子目录(包括嵌套的子目录):

         C:\Root\SubDir2\SubSubDir2_1
         C:\Root\SubDir3
         C:\Root\SubDir3\SubSubDir3_1
         C:\Root\SubDir4
    

    如果您想要 顶级 子目录 (SubDir1..SubDir4),其中没有 app.config 或在它们自己的子目录中:

     var dirs = Directory
       .EnumerateDirectories(path)
       .Where(dir => !Directory
          .EnumerateFiles(dir, "app.config", SearchOption.AllDirectories)
          .Any()); 
    

    我们将拥有

         C:\Root\SubDir3
    

    仅因为 SubDir3 及其子目录 (SubSubDir3_1) 都不包含 app.config

    【讨论】:

    • 感谢您的回复,但我想您可能有点理解错误。假设我的主目录是 A ,我有子目录 P,Q,R,S 。其中 S 缺少此配置文件 我只想在控制台中打印“S” 这里棘手的部分是此配置文件可以在该文件夹内的任何位置
    • 是的,我做到了,它并没有像我预期的那样工作
    猜你喜欢
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2023-01-15
    • 1970-01-01
    相关资源
    最近更新 更多