【发布时间】:2020-12-20 21:26:40
【问题描述】:
我有一个代码,它通过优先考虑每个子文件夹的 dev 文件夹文件,从所有子文件夹(文件夹 1、文件夹 2、...)中读取文件,如下所示:
Products
├── folder1
│ ├── dev
│ │ └── files1.json
│ ├── files1.json
│ ├── files2.json
│ ├── files3.txt
│ ├── prod
│ │ └── files1.json
│ └── stage
│ └── files1.json
├── folder2
│ ├── dev
│ │ └── files5.json
│ ├── files4.json
│ ├── files5.json
│ ├── files6.txt
│ ├── prod
│ │ └── files5.json
│ └── stage
│ └── files5.json
└── folder3
├── files10.json
├── files7.json
├── files8.json
└── files9.txt
下面是我完成这项工作的代码,但我想如果有的话,我们可以使用linq 以更简单的方式执行以下相同的逻辑吗?意思是在每个子文件夹中优先考虑dev文件夹,然后从子文件夹级别读取所有文件。
private IList<string> ReadFiles(string path)
{
var allFiles = new List<string>();
var subFolders = Directory.EnumerateDirectories(path).ToList();
var fileType = new List<string>() { "*.json", "*.txt" };
for (int i = 0; i < fileType.Count; i++)
{
foreach (var sub in subFolders)
{
var jsonFiles = Directory.GetFiles(sub, fileType[i], SearchOption.AllDirectories).ToList();
var subSubFolders = Directory.EnumerateDirectories(sub).Where(x => x.Contains("dev")).ToList();
if (subSubFolders.Count > 0)
{
var subDev = jsonFiles.Where(x => x.Contains("dev")).ToList();
jsonFiles.RemoveAll(x => x.Contains("dev"));
foreach (var item in jsonFiles)
{
var dd = subDev.Where(x => System.IO.File.ReadLines(x).SequenceEqual(System.IO.File.ReadLines(item))).FirstOrDefault();
allFiles.Add(dd == null ? item : dd);
}
}
else
{
foreach (var item in jsonFiles)
{
allFiles.Add(item);
}
}
}
}
return allFiles;
}
【问题讨论】:
-
您可以枚举所有子文件夹中的所有
*.json和*.txt文件,然后检查完整路径,是否包含dev子文件夹。或按文件名分组(如果它对于整个Products文件夹是唯一的) -
@PavelAnikhouski 您能否举例说明这将如何工作?我只是对如何检查完整路径并有效地完成所有这些感到困惑。文件名不是唯一的。
标签: c# linq file asp.net-core recursion