File.ReadAllLines有两个.text文件,这可以放在一个列表中吗?

时间:2015-06-26 14:16:15

标签: c# visual-studio-2010 list text

所以我有一个包含文本文件的列表,但现在我想将.text文件添加到单个.Add中。我很难解释,但希望你能用这个例子理解:

List.Add(File.ReadAllLines("C:\\Users\\glb1.txt" + "C:\\Users\\glb2.txt").ToList());//This isnt possible??
List.Add(File.ReadAllLines("C:\\Users\\abc.txt").ToList());
List.Add(File.ReadAllLines("C:\\Users\\klm1.txt" + "C:\\Users\\klm2.txt").ToList());//This isnt possible??

那么可以将2个文本文件添加到列表的一个[]中吗?

3 个答案:

答案 0 :(得分:2)

当然可以。使用AddRange

List.AddRange(File.ReadAllLines("C:\\Users\\glb1.txt"));
List.AddRange(File.ReadAllLines("C:\\Users\\glb2.txt"));
List.AddRange(File.ReadAllLines("C:\\Users\\abc.txt"));
List.AddRange(File.ReadAllLines("C:\\Users\\klm1.txt"))
List.AddRange(File.ReadAllLines("C:\\Users\\klm2.txt"))

一次使用一个路径。请注意,在添加ToList之前无需调用它们

答案 1 :(得分:2)

您可以使用File.ReadLines + Enumerable.Concat + List.AddRange

var allLines = File.ReadLines(path1)
       .Concat(File.ReadLines(path2))
       .Concat(File.ReadLines(path3))
       .Concat(File.ReadLines(path4))
       .Concat(File.ReadLines(path5));
List.AddRange( allLines );

答案 2 :(得分:1)

或者,甚至更好,使用LINQ:

var files = new []{"glb1.txt", "glb2.txt", "abc.txt", "klm1.txt", "klm2.txt"}; //An array of all the file names you want
var mylist = files.SelectMany(p=>File.ReadAllLines(Path.Combine(@"C:\Users", p))).ToList(); //This list will now hold every line from each of the files

SelectMany的作用类似Select,但它也会将列表拼凑成一个。这样做的是,对于files中的每个文件名,它将读取完整路径,并选择(返回)一个行列表。然后,SelectMany将所有行组合成一个列表。

如有必要,您现在可以撰写List.AddRange(mylist)(或者更好的是,您可以将var mylist = ...替换为List = ...)。

此外,您应该小心命名List"列表",因为这可能会造成混淆。使用除类型名称之外的其他名称,例如" myList"相反,总是一个好主意。