将两个 fileinfo[] 相加
Adding two fileinfo[] together
FileInfo[] comList = new FileInfo[]{};
FileInfo[] files
DirectoryInfo dInfo;
string[] folderList = path.Split(',');
foreach (string folder in folderList){
dInfo = new DirectoryInfo(folder);
files = dInfo.GetFiles().Where(F => extensions.Contains(f.Extension.ToLower())).ToArray();
comList.Concat(files);
}
我正在尝试读取多个文件夹并将所有文件放入一个 FileInfo[],但是在对 comList 进行连接之后,我的 comList 仍然是空的。
路径输入类似于string path = "pathA,pathB,pathC"
如果这不是这样做的方法,那么将不同目录中的所有文件整合到一个文件中的更好方法是什么。
根据 Microsoft documentation Concat
将 returns 一个新集合而不修改现有集合:
public static System.Collections.Generic.IEnumerable<TSource> Concat<TSource> (
this System.Collections.Generic.IEnumerable<TSource> first,
System.Collections.Generic.IEnumerable<TSource> second);
因此,在您的场景中,如下所示将语句分配回 comList
,您就可以开始了!
comList = comList.Concat(files);
尽管如此,如果您不限制自己为 comList
使用数组,您可以考虑使用 List
,这样我们就可以在没有冗余转换的情况下实现相同的效果:
List<FileInfo> comList = new List<FileInfo>();
...
foreach (string folder in folderList) {
var dInfo = new DirectoryInfo(folder);
var files = dInfo.GetFiles().Where(f =>
extensions.Contains(
f.Extension.ToLower()));
comList.AddRange(files);
}
您需要使用 comList.Concat(files) 的 return,例如:
comList = comList.Concat(files).ToArray();
需要 ToArray()
方法,因为 Concat()
return 是 IEnumerable
。
或者,您可以将 comList
设为实际的 List<FileInfo>
并在每次迭代中使用其 AddRange 方法:
comList.AddRange(files);
FileInfo[] comList = new FileInfo[]{};
FileInfo[] files
DirectoryInfo dInfo;
string[] folderList = path.Split(',');
foreach (string folder in folderList){
dInfo = new DirectoryInfo(folder);
files = dInfo.GetFiles().Where(F => extensions.Contains(f.Extension.ToLower())).ToArray();
comList.Concat(files);
}
我正在尝试读取多个文件夹并将所有文件放入一个 FileInfo[],但是在对 comList 进行连接之后,我的 comList 仍然是空的。
路径输入类似于string path = "pathA,pathB,pathC"
如果这不是这样做的方法,那么将不同目录中的所有文件整合到一个文件中的更好方法是什么。
根据 Microsoft documentation Concat
将 returns 一个新集合而不修改现有集合:
public static System.Collections.Generic.IEnumerable<TSource> Concat<TSource> (
this System.Collections.Generic.IEnumerable<TSource> first,
System.Collections.Generic.IEnumerable<TSource> second);
因此,在您的场景中,如下所示将语句分配回 comList
,您就可以开始了!
comList = comList.Concat(files);
尽管如此,如果您不限制自己为 comList
使用数组,您可以考虑使用 List
,这样我们就可以在没有冗余转换的情况下实现相同的效果:
List<FileInfo> comList = new List<FileInfo>();
...
foreach (string folder in folderList) {
var dInfo = new DirectoryInfo(folder);
var files = dInfo.GetFiles().Where(f =>
extensions.Contains(
f.Extension.ToLower()));
comList.AddRange(files);
}
您需要使用 comList.Concat(files) 的 return,例如:
comList = comList.Concat(files).ToArray();
需要 ToArray()
方法,因为 Concat()
return 是 IEnumerable
。
或者,您可以将 comList
设为实际的 List<FileInfo>
并在每次迭代中使用其 AddRange 方法:
comList.AddRange(files);