I want my program to read from two text files into one List<T>
. The List<T>
is sorting and cleaning duplicates.
I want the List<T>
to save (after sorting and cleaning) to a txt file.
But when I looked in the result txt file, I found this message:
System.Collections.Generic.List`1[System.String]
Does anyone have an idea how I could fix this error?
Here is my code:
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<String> pass1 = new List<String>(); 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<String> 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(); } } }
The simplest way to save a list of strings to a file is to use File. WriteAllLines().
Remarks. If the target file already exists, it is overwritten. The default behavior of the WriteAllLines method is to write out data using UTF-8 encoding without a byte order mark (BOM).
C# write text with StreamWriter's WriteLine txt"; using var sw = new StreamWriter(path); sw. WriteLine("old falcon"); Console. WriteLine("data written to file"); The example writes one line to the text file.
There's a handy little method File.WriteAllLines -- no need to open a StreamWriter
yourself:
In .net 4:
File.WriteAllLines(speichern, ausgabeListe);
In .net 3.5:
File.WriteAllLines(speichern, ausgabeListe.ToArray());
Likewise, you could replace your reading logic with File.ReadAllLines, which returns an array of strings (use ToList()
on that if you want a List<string>
).
So, in fact, your complete code could be reduced to:
// Input List<String> data = File.ReadAllLines(pfad + datei) .Concat(File.ReadAllLines(pfad2 + datei2)) .Distinct().ToList(); // Processing data.Sort(); // Output data.ForEach(Console.WriteLine); File.WriteAllLines(speichern, data);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With