将组合框中添加的项目保存到文件中

时间:2018-02-17 17:10:13

标签: c#

我在编写C#程序中的文件时遇到问题。

我的程序将.txt文件加载到一个组合框,该组合框有3个状态选项。用户可以从选定列表中添加最多5个其他状态。退出时,如果用户选择“是”,程序会将添加的信息保存回.txt文件。

我的问题是下面的代码是将默认状态添加回列表中。我应该在foreach语句下使用If语句,还是有办法编写它,以便只将用户添加的状态添加到我的.txt文件而不是所有值都重新添加?

private void saveMyFile()
{
    try
    {
        StreamWriter outputFile;
        outputFile = File.AppendText("states.txt");
        foreach (var cbitem in statesComboBox.Items)
        {
            outputFile.WriteLine(cbitem);
        }
        outputFile.Close();
        MessageBox.Show("Your information has been saved. Closing program.");
    }
    catch
    {
        MessageBox.Show("Data could not be written to file");
    }
}

1 个答案:

答案 0 :(得分:2)

您可以采取以下措施来实现这一目标。

  • 如果组合框中项目的顺序是固定的,您可以在保存时跳过前x项:

    private int ExistingStates = 3; // You can later change this number when
                                    // loading the items.
    private void saveMyFile()
    {
        StreamWriter outputFile;
        outputFile = File.AppendText("states.txt");
        foreach (var cbItem in statesComboBox.Items.Cast<string>().Skip(ExistingStates))
        {
            outputFile.WriteLine(cbItem);
        }
        outputFile.Close();
    }
    
  • 您可以拥有现有项目的数组,以便检查正在保存的项目是否已存在:

    private string[] ExistingStates = {"state1", "state2"}; // Add items to the array
                                                            // after loading them.
    private void saveMyFile()
    {
        StreamWriter outputFile;
        outputFile = File.AppendText("states.txt");
        foreach (var cbItem in statesComboBox.Items)
        {
            if (!ExistingStates.Contains(cbItem))
                outputFile.WriteLine(cbItem);
        }
        outputFile.Close();
    }
    
  • 另一种选择是将AppendText方法替换为CreateText来覆盖现有项目:

    private void saveMyFile()
    {
        StreamWriter outputFile;
        outputFile = File.CreateText("states.txt");
        foreach (var cbItem in statesComboBox.Items)
        {
            outputFile.WriteLine(cbItem);
        }
        outputFile.Close();
    }
    

    或者您可以用一个简单的行替换整个方法(使用WriteAllLines方法):

    File.WriteAllLines("states.txt", statesComboBox.Items.Cast<string>());
    

希望有所帮助。