我想知道是否有人知道更清洁的方法。我的程序的一部分将列出包含文件的所有输入目录。
但是,为此,我手动将每个输入目录存储为变量,并将它们用作搜索目标。
我想知道是否有更清洁的方法来做到这一点?
例如,我现在脑子里的伪代码是:
<span>
开始,Date
然后将所有子文件夹存储在数组If FolderName == "Input"
InputSubs
中的每个文件夹,如果InputSubs
中没有包含子文件夹且InputSub
中没有文件,则转到下一个InputSubs
包含一个子目录,则将所有子目录存储在数组InputSubs
中,然后转到下一个InputSubs2
包含文件,请将InputSubs
和DirPath
存储为数组FileName
中的字符串InputFiles
InputSubs
流程
最深的输入文件夹是2个目录。
输入文件夹结构的一个示例位于附加图像中。
我目前使用的代码示例如下。
InputSubs2
我有一种不可避免的倾向于过度复杂化的事情,并且想知道是否有比我头脑中的伪代码更容易,或者更有效的方法。
谢谢。
答案 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());
它将返回包含文件的所有目录名称