列出目录中的所有子目录和文件

时间:2016-05-02 12:50:36

标签: c# directory-structure subdirectory file-listing

我想知道是否有人知道更清洁的方法。我的程序的一部分将列出包含文件的所有输入目录。

但是,为此,我手动将每个输入目录存储为变量,并将它们用作搜索目标。

我想知道是否有更清洁的方法来做到这一点?

例如,我现在脑子里的伪代码是:

  • 从目录<span>开始,Date然后将所有子文件夹存储在数组If FolderName == "Input"
  • 对于InputSubs中的每个文件夹,如果InputSubs中没有包含子文件夹且InputSub中没有文件,则转到下一个
  • 如果InputSubs包含一个子目录,则将所有子目录存储在数组InputSubs中,然后转到下一个
  • 如果InputSubs2包含文件,请将InputSubsDirPath存储为数组FileName中的字符串
  • 重复InputFiles
  • InputSubs流程

最深的输入文件夹是2个目录。

输入文件夹结构的一个示例位于附加图像中。

enter image description here

我目前使用的代码示例如下。

InputSubs2

我有一种不可避免的倾向于过度复杂化的事情,并且想知道是否有比我头脑中的伪代码更容易,或者更有效的方法。

谢谢。

3 个答案:

答案 0 :(得分:1)

  

基本上我正在寻找我的列表框,其中填充了“输入”文件夹或其子文件夹中存在的任何文件的完整路径和文件名。 - DDuffy

目录的所有文件及其子目录:

string[] files = Directory.GetFiles("Your Input Direcotry","*.*", SearchOption.AllDirectories);
  

这确实改进了我的原始代码。谢谢。但是,我需要为每个输入目录复制这个。我无法在基目录中使用它,因为基目录中的每个文件夹都包含输入和输出文件夹。是否有办法遍历基目录中找到的每个Input文件夹? - DDuffy

public static List<string> GetAllFilesOfAllDirectoriesCalledInput(string root)
{
    List<string> inputDirectories = FindSubDirectoriesCalledInput(root);
    List<string> result = new List<string>();
    foreach(string inputDirectory in inputDirectories)
        result.AddRange(Directory.GetFiles(inputDirectory,"*.*", SearchOption.AllDirectories));
    return result;
}

public static List<string> FindSubDirectoriesCalledInput(string currentRoot)
{ 
    List<string> results = new List<string>();
    foreach(string subDirectory in Directory.GetDirectories(currentRoot))
    {
        if(subDirectory.EndsWith("\\Input", StringComparison.InvariantCultureIgnoreCase))
            results.Add(subDirectory);  
        else
            results.AddRange(FindSubDirectoriesCalledInput(subDirectory));
     }
     return results;
 }

答案 1 :(得分:1)

我建议您使用Dictionary<string, List<string>>来存储结果,其中键字段存储每个目录的值,值字段存储相应目录中的文件列表。现在来看看代码:

Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>();
foreach (var item in Directory.GetDirectories(@"C:\Users\user\Desktop\search Directory", "*.*", SearchOption.AllDirectories))
{
    if (new DirectoryInfo(item).Name == "Input")
       dict.Add(item, getMyfiles(item));
}

这将遍历指定文件夹中的每个目录和子目录。在每次迭代中,它调用getMyfiles(),它将返回指定目录中包含的文件。我们正在收集每次迭代中的目录名称和文件列表。方法getMyfiles()的定义如下:

private List<string> getMyfiles(string DirectoryPath)
{
    return Directory.GetFiles(DirectoryPath, "*.*").ToList();
}

答案 2 :(得分:0)

var dirList = Directory.GetDirectories("Path", "*", SearchOption.AllDirectories).Where(subdir => !Directory.GetDirectories(subdir).Any());

它将返回包含文件的所有目录名称