从List 保存到txt
我希望我的程序从两个文本文件读取到一个List
。 List
是排序和清理重复项。
我希望List
保存(排序和清理后)到txt文件。
但是当我查看结果txt文件时,我发现了这条消息:
System.Collections.Generic.List`1 [System.String]
有谁知道如何解决这个错误?
这是我的代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace Uniqpass { class Program { static void Main(string[] args) { String pfad = "C:\\Dokumente und Einstellungen\\Bektas\\Desktop\\test\\"; String pfad2 = "C:\\Dokumente und Einstellungen\\Bektas\\Desktop\\test\\"; String speichern = "C:\\Dokumente und Einstellungen\\Bektas\\Desktop\\test\\ausgabe.txt"; String datei = "text1.txt"; String datei2 = "text2.txt"; try { //Einlesen TxT 1 List pass1 = new List(); StreamReader sr1 = new StreamReader(pfad + datei); while (sr1.Peek() > -1) { pass1.Add(sr1.ReadLine()); } sr1.Close(); //Einlesen TxT 2 StreamReader sr2 = new StreamReader(pfad2 + datei2); while (sr2.Peek() > -1) { pass1.Add(sr2.ReadLine()); } sr2.Close(); List ausgabeListe = pass1.Distinct().ToList(); ausgabeListe.Sort(); ausgabeListe.ForEach(Console.WriteLine); StreamWriter file = new System.IO.StreamWriter(speichern); file.WriteLine(ausgabeListe); file.Close(); } catch (Exception) { Console.WriteLine("Error"); } Console.ReadKey(); } } }
有一个方便的小方法File.WriteAllLines – 无需自己打开StreamWriter
:
在.net 4中:
File.WriteAllLines(speichern, ausgabeListe);
在.net 3.5中:
File.WriteAllLines(speichern, ausgabeListe.ToArray());
同样,您可以使用File.ReadAllLines替换您的读取逻辑, FileReadAllLines返回一个字符串数组(如果您需要List
,则使用ToList()
)。
因此,实际上,您的完整代码可以简化为:
// Input List data = File.ReadAllLines(pfad + datei) .Concat(File.ReadAllLines(pfad2 + datei2)) .Distinct().ToList(); // Processing data.Sort(); // Output data.ForEach(Console.WriteLine); File.WriteAllLines(speichern, data);
这行是写入List的ToString表示,导致你得到的文本行:
StreamWriter file = new System.IO.StreamWriter(speichern); file.WriteLine(ausgabeListe); file.Close();
相反,你想写每一行。
StreamWriter file = new System.IO.StreamWriter(speichern); ausgabeListe.ForEach(file.WriteLine); file.Close();
循环遍历列表,单独写下每一行:
StreamWriter file = new System.IO.StreamWriter(speichern); foreach(string line in ausgabeListe) file.WriteLine(line); file.Close();
您正在将列表对象写入文件,因此您可以看到类型名称。
正如您使用ForEach
将内容写入控制台一样,您需要遍历ausgabeListe
,为列表中的每个项目调用WriteLine()
。
StreamWriter file = new System.IO.StreamWriter(speichern); foreach(string x in ausgabeListe) file.WriteLine(x); file.Close();
我使用下面的LINQ将每行写入文本文件。
var myList=new List { "Hello", "World" }; using (var file = new StreamWriter("myfile.txt")) { myList.ForEach(v=>file.WriteLine(v)); }