c# - generate - Guardando de la lista<T> a txt
params comments c# (6)
Quiero que mi programa lea de dos archivos de texto en una List<T>
. La List<T>
está ordenando y limpiando duplicados.
Quiero que la List<T>
guarde (después de ordenar y limpiar) en un archivo txt.
Pero cuando miré el archivo de texto resultante, encontré este mensaje:
System.Collections.Generic.List`1 [System.String]
¿Alguien tiene una idea de cómo podría solucionar este error?
Aquí está mi código:
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();
}
}
}
Es esta línea la que escribe la representación ToString de la Lista, resultando en la línea de texto que obtuvo:
StreamWriter file = new System.IO.StreamWriter(speichern);
file.WriteLine(ausgabeListe);
file.Close();
En su lugar quieres escribir cada línea.
StreamWriter file = new System.IO.StreamWriter(speichern);
ausgabeListe.ForEach(file.WriteLine);
file.Close();
Está escribiendo el objeto de lista en el archivo, por lo que ve el nombre de tipo.
Del mismo modo que está utilizando ForEach
para escribir el contenido en la Consola, debe iterar sobre ausgabeListe
, llamando a WriteLine()
para cada elemento de la lista.
Estoy usando el LINQ como abajo para escribir cada línea en un archivo de texto.
var myList=new List<string>
{
"Hello",
"World"
};
using (var file = new StreamWriter("myfile.txt"))
{
myList.ForEach(v=>file.WriteLine(v));
}
Hay un pequeño y práctico método File.WriteAllLines : no es necesario abrir un StreamWriter
usted mismo:
En .net 4:
File.WriteAllLines(speichern, ausgabeListe);
En .net 3.5:
File.WriteAllLines(speichern, ausgabeListe.ToArray());
Del mismo modo, puede reemplazar su lógica de lectura con File.ReadAllLines , que devuelve una matriz de cadenas (use ToList()
en eso si desea una List<string>
).
Entonces, de hecho, su código completo podría reducirse a:
// 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);
Recorra la lista, escribiendo cada línea individualmente:
StreamWriter file = new System.IO.StreamWriter(speichern);
foreach(string line in ausgabeListe)
file.WriteLine(line);
file.Close();
StreamWriter file = new System.IO.StreamWriter(speichern);
foreach(string x in ausgabeListe)
file.WriteLine(x);
file.Close();