我有类似的东西:
var d1 = new DirectoryInfo(Path.Combine(source, @"bills_save." + dt));
var d2 = new DirectoryInfo(Path.Combine(source, @"reports_save." + dt));
var f1 = d1.GetFiles();
var f2 = d2.GetFiles();
我希望将所有文件名合并到一个FileInfo列表中。会使我的解析更容易。 Concat,AddRange,加入......似乎没什么用。我看到的大多数是添加2个列表,数组。
答案 0 :(得分:7)
嗯,Concat
当然应该有效:
// f3 will be IEnumerable<FileInfo>
var f3 = f1.Concat(f2);
如果您需要数组或列表,请相应地致电ToArray
或ToList
:
var list3 = f1.Concat(f2).ToList();
var array3 = f1.Concat(f2).ToArray();
顺便说一下,你的逐字字符串文字不需要是逐字的 - 它不包含任何需要转义的字符串。
答案 1 :(得分:3)
您需要制作List<FileInfo>
,如下所示:
List<FileInfo> files = new List<FileInfo>();
files.AddRange(d1.GetFiles());
files.AddRange(d2.GetFiles());
如果您有DirectoryInfo
的集合,则可以致电SelectMany
:
IEnumerable<FileInfo> files = directories.SelectMany(d => d.GetFiles());
答案 2 :(得分:-1)
我的解决方案:
public static FileInfo[] GetFiles(DirectoryInfo dir, string searchPattern, SearchOption searchOption)
{
string[] searchPatterns = searchPattern.Split('|');
FileInfo[] fileinfos=null;
foreach (string sp in searchPatterns)
{
FileInfo[] newFiles = dir.GetFiles(sp, searchOption);
if (fileinfos == null)
{
fileinfos = newFiles;
}
else
{
if (newFiles.Length > 0)
{
fileinfos = (FileInfo[])fileinfos.Concat(newFiles).ToArray();
}
}
}
return fileinfos;
}