将多个项目添加到文件

时间:2017-04-09 20:43:00

标签: c#

我不确定我需要在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);
    }
}    

2 个答案:

答案 0 :(得分:0)

这样的事情会起作用吗?

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

答案 1 :(得分:0)

您可以使用File.AppendAllLines只使用一行来执行此操作,该行将打开或创建文件,向其附加文本并关闭它。

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

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

来完成
File.AppendAllLines(TO_DO_LIST, itemsList.Items.Cast<String>().ToList());