我在编写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");
}
}
答案 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>());
希望有所帮助。