2017-04-09 48 views
0

我不知道我需要放入这个while循环(或者如果有更好的方法来做到这一点),以便将itemsListBox中的所有项目添加到文件中。现在(在writer.writeline之前没有任何while循环)它只将最后一项添加到文件中。该程序应该将项目添加到列表框并将其保存到文件中,然后在重新打开程序时加载它们。它还有一个跟踪列表框中项目数量的标签。添加多个项目到一个文件

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

回答

0

你可以只用一个使用File.AppendAllLines线,这将打开或创建一个文件,文本追加到它,并关闭它做到这一点。

第一个参数是文件路径,第二个参数是要添加的行的IEnumerable

由于ListBox.ItemsListBox.ObjectCollection,我们需要将其转换为IEnumerable<string>才能使用AppendAllLines方法。这可以通过Cast<string>()方法来完成,结合ToList()

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

会这样的工作吗?

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

这在某种程度上并不能改变什么,当然我想的东西很简单 –

相关问题