2017-04-09 5 views
0

Ich bin mir nicht sicher, was ich in diese while-Schleife einfügen muss (oder ob es einen besseren Weg gibt), um alle Elemente in der itemsListBox zur Datei hinzuzufügen. Im Moment (ohne jede while-Schleife vor writer.writeline) fügt es nur das letzte Element zur Datei hinzu. Das Programm soll Elemente zu einem Listenfeld hinzufügen und sie in einer Datei speichern und dann beim erneuten Öffnen des Programms laden. Es hat auch eine Beschriftung, die die Anzahl der Elemente in der Listbox verfolgt.Hinzufügen mehrerer Elemente zu einer Datei

private const string TO_DO_LIST = "to-do-list.txt"; 
public Form1() 
{ 
    InitializeComponent(); 
} 

private void enterButton_Click(object sender, EventArgs e) 
{ 
    AddItem();    
} 

private void AddItem() 
{ 
    itemsList.Items.Add(itemsBox.Text); 
    numberOfItemsLabel.Text = itemsList.Items.Count.ToString(); 
    SaveItem();   
} 

private void SaveItem() 
{ 
    StreamWriter writer = File.CreateText(TO_DO_LIST); 
    string newItem = itemsBox.Text; 

    while()//??? 
    { 
     writer.WriteLine(newItem); 
    } 

    writer.Close(); 
} 

private void Form1_Load(object sender, EventArgs e) 
{ 
    try 
    { 
     StreamReader reader = File.OpenText(TO_DO_LIST); 
     while (!reader.EndOfStream) 
     { 
      itemsList.Items.Add(reader.ReadLine()); 
     } 
    } 
    catch (FileNotFoundException ex) 
    {    
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
}  

Antwort

0

Sie können es mit nur einer Linie mit File.AppendAllLines, die eine Datei, fügen Sie Text, um ihn öffnet oder erstellen, und schließen Sie es.

Das erste Argument ist der Dateipfad und das zweite Argument ist ein IEnumerable der Zeilen, die Sie hinzufügen möchten.

Seit ListBox.Items ist ein ListBox.ObjectCollection, müssen wir es auf ein IEnumerable<string> konvertieren, um die AppendAllLines Methode zu verwenden.

File.AppendAllLines(TO_DO_LIST, itemsList.Items.Cast<String>().ToList()); 
0

Würde so etwas funktionieren?

using (StreamWriter writer = File.CreateText(TO_DO_LIST)) 
{ 
    foreach (string text in itemsList.Items) 
    { 
     writer.WriteLine(text); 
    } 
}; 
+0

dieses irgendwie ändert sich nichts, doch etwas fehlt mir ganz einfach: Dies kann mit dem Cast<string>() Verfahren, kombiniert mit ToList() erfolgen –

Verwandte Themen