Сохранение из списка <T> в txt
Я хочу, чтобы моя программа читала из двух текстовых файлов в один List<T>
.
List<T>
выполняет сортировку и очистку дубликатов.
Я хочу, чтобы List<T>
сохранял (после сортировки и очистки) файл 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<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
Там есть удобный небольшой метод File.WriteAllLines - не нужно открывать StreamWriter
самостоятельно:
В .net 4:
File.WriteAllLines(speichern, ausgabeListe);
В .net 3.5:
File.WriteAllLines(speichern, ausgabeListe.ToArray());
Аналогично, вы можете заменить свою логику чтения File.ReadAllLines, которая возвращает массив строк (используйте ToList()
на этом, если вы хотите List<string>
).
Таким образом, ваш полный код может быть уменьшен до:
// 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
Эта строка, которая записывает представление 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();
Ответ 3
Прокручивайте список, записывая каждую строку отдельно:
StreamWriter file = new System.IO.StreamWriter(speichern);
foreach(string line in ausgabeListe)
file.WriteLine(line);
file.Close();
Ответ 4
Вы записываете объект списка в файл, поэтому вы видите имя типа.
Так же, как вы используете ForEach
для записи содержимого в Консоль, вам нужно выполнить итерацию по ausgabeListe
, вызвав WriteLine()
для каждого элемента в списке.
Ответ 5
StreamWriter file = new System.IO.StreamWriter(speichern);
foreach(string x in ausgabeListe)
file.WriteLine(x);
file.Close();
Ответ 6
Я использую LINQ, как показано ниже, чтобы записать каждую строку в текстовый файл.
var myList=new List<string>
{
"Hello",
"World"
};
using (var file = new StreamWriter("myfile.txt"))
{
myList.ForEach(v=>file.WriteLine(v));
}
Ответ 7
Попробуйте код ниже:
StreamWriter writer = new StreamWriter("C:\\Users\\Alchemy\\Desktop\\c#\\InputFileFrmUser.csv");
list = new List<Product>() { new Product() { ProductId=1, Name="Nike 12N0",Brand="Nike",Price=12000,Quantity=50},
new Product() { ProductId =2, Name = "Puma 560K", Brand = "Puma", Price = 120000, Quantity = 55 },
new Product() { ProductId=3, Name="WoodLand V2",Brand="WoodLand",Price=21020,Quantity=25},
new Product() { ProductId=4, Name="Adidas S52",Brand="Adidas",Price=20000,Quantity=35},
new Product() { ProductId=5, Name="Rebook SPEED2O",Brand="Rebook",Price=1200,Quantity=15}};
foreach (var x in list) {
string wr = x.ProductId + " " + x.Name + "" + x.Brand + " " + x.Quantity + " " + x.Price;
writer.Flush();
writer.WriteLine(wr);
}
Console.WriteLine("--------ProductList Updated SucessFully----------------");