方法“;添加“;新数据到当前打开的文件C#

本文关键字:文件 新数据 添加 方法 数据 | 更新日期: 2023-09-27 18:29:20

我正在编写一个程序,其中我有两个具有相同数据的列表框,但其中一个列表框项目用学生姓名及其总分更新,另一个用学生姓名和学生姓名旁边的每个单独的评判分数更新。到目前为止一切都很顺利,但现在我陷入了困境。。。我有两个方法Save()和SaveAs(),其中Save()会自动将数据写入"FormData.bin",而SaveAs()则允许用户输入自己的文件名。

是否可以重写Save()方法,这样当我单击保存时,它会将当前数据保存到打开的文件中,就像在MS Word中键入文档时一样,只需单击保存即可将新键入的数据添加到当前文件中。这是我写的Save()方法。

public void SaveEntry()
    {
        int itemsCount = Math.Min(lstbxStudents.Items.Count, lstbxStudentScore.Items.Count); 
        saveFileDialog1.InitialDirectory = Application.StartupPath;
        saveFileDialog1.FileName = "FormData.bin";
        {
            try
            {
                using (FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create))
                using (BinaryWriter Save = new BinaryWriter(fs))
                {
                    Save.Write(cmbbxAge.Text);
                    Save.Write(cmbbxBelt.Text);
                    Save.Write(cmbbxCategorie.Text);
                    Save.Write(cmbbxGender.Text);
                    Save.Write(cmbbxGup.Text);
                    Save.Write(txtJudge1.Text);
                    Save.Write(txtJudge2.Text);
                    Save.Write(txtJudge3.Text);
                    Save.Write(txtJudge4.Text);
                    Save.Write(txtJudge5.Text);
                    Save.Write(txtOperator.Text);
                    Save.Write(txtPos1.Text);
                    Save.Write(txtPos2.Text);
                    Save.Write(txtPos3.Text);
                    Save.Write(txtPos4.Text);
                    Save.Write(txtPos5.Text);
                    for (int i = 0; i < itemsCount; i++)
                    {
                        Save.Write(lstbxStudents.Items[i].ToString());
                        Save.Write(lstbxStudentScore.Items[i].ToString());
                    }
                    Save.Close();
                    fs.Close();

                }
            }
            catch (Exception error)
            {
                MessageBox.Show(error.Message, "CTSD Forms");
            }
        }
    }

提前感谢

这是表格的图片

窗口窗体

方法“;添加“;新数据到当前打开的文件C#

如果我理解正确,您想要实现的是附加文本而不是覆盖文本。看看StreamWriter类,它还允许指定在构建实例时是否要附加数据。它还允许直接创建/附加到文件,而不需要Stream

此外,考虑为变量使用合适的名称:

Save是一个动作,而不是一个对象。CCD_ 3会更好。

按照代码中显示的方式使用Write,您将以不带分隔符的所有文本结束。您应该考虑使用WriteLine函数。

【澄清后编辑】

SaveEntry应该使用一个参数来指定保存是作为SaveAs还是Save进行的。第一次保存应始终是SaveAs。文件名也应该保存在上下文中(你的表单类,但最好有一个"视图模型")

private String _currentFileName;
public void SaveEntry(bool saveAs)
{
   if (saveAs || String.IsNullOrEmpty(_currentFileName))
   {
        saveFileDialog1.InitialDirectory = Application.StartupPath;
        saveFileDialog1.FileName = "FormData.bin";
        var result = saveFileDialog1.ShowDialog();
        // TODO: handle user cancellation
        _currentFileName = saveFileDialog1.FileName;
   }
   using (var writer = new StreamWriter(_currentFileName))
   {
       // TODO: do stuff with your writer
   }
}