假设我有一个包含100多个文件夹路径的列表。我想从每个文件夹路径中只检索一个文件路径。这是我正在做或计划这样做的方式:
var Files = new List<String>();
var Directories = Directory.GetDirectories("C:\\Firstfolder\\Secondfolder\\");
Array.ForEach(Directories, D => Files.Add(Directory.GetFiles(D).FirstOrDefault()));
现在,这是最有效的方式吗?因为我的程序每次启动时都会执行此代码。
答案 0 :(得分:6)
而不是Directory.GetFiles
使用Directory.EnumerateFiles
来避免将所有文件路径加载到内存中。documentation的引用解释了差异:
EnumerateFiles
和GetFiles
方法的不同之处如下:使用EnumerateFiles时,可以在返回整个集合之前开始枚举名称集合;当您使用GetFiles
时,必须等待返回整个数组,然后才能访问该数组。因此,当您使用许多文件和目录时,EnumerateFiles可以更有效。
答案 1 :(得分:1)
如果你使用的是.Net 4.0,你应该这样做......
var Files = Directories.SelectMany(x => Directory.EnumerateFiles(x).FirstOrDefault()).ToList();