Saving from List to txt

2019-01-11 17:03发布

问题:

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();
        }
    }
}

回答1:

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);


回答2:

It's this line which writes the ToString representation of the List, resulting into the text line you got:

StreamWriter file = new System.IO.StreamWriter(speichern);
file.WriteLine(ausgabeListe);
file.Close();

Instead you want to write each line.

StreamWriter file = new System.IO.StreamWriter(speichern);
ausgabeListe.ForEach(file.WriteLine);
file.Close();


回答3:

Loop through the list, writing each line individually:

StreamWriter file = new System.IO.StreamWriter(speichern);
foreach(string line in ausgabeListe)
    file.WriteLine(line);
file.Close();


回答4:

You are writing the list object into the file, so you see the type name.

Just as you are using ForEach to write the contents to the Console, you need to iterate over ausgabeListe, calling WriteLine() for each item in the list.



回答5:

StreamWriter file = new System.IO.StreamWriter(speichern);
foreach(string x in ausgabeListe)
    file.WriteLine(x);
file.Close();


回答6:

I am using the LINQ like below to write each line to text file.

var myList=new List<string>
{
    "Hello",
    "World"
};
using (var file = new StreamWriter("myfile.txt"))
{
    myList.ForEach(v=>file.WriteLine(v));
}