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

时间:2016-01-07 18:32:09

标签: c# openfiledialog savefiledialog binaryreader binarywriter

我正在编写一个程序,其中我有2个具有相同数据的列表框,但是一个列表框项目使用学生姓名及其TOTAL分数进行更新,另一个列表框项目使用学生姓名和学生姓名旁边的每个个人法官分数进行更新。到目前为止一切都很顺利,但现在我卡住了......我有两个方法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");
            }
        }
    }

提前谢谢

这是Form

的图像

Window Form

1 个答案:

答案 0 :(得分:0)

如果我正确理解你想要实现的是附加文本而不是覆盖它。查看StreamWriter类,它还允许在构造实例时指定是否要append the data or not。它还允许直接创建/附加到文件,而无需template < class T> void h(T && t) { using rawT = std::remove_reference_t<T>; std::cout << " Is type &&: " << std::is_same<decltype(t), rawT &&>::value << '\n'; std::cout << " Is type &: " << std::is_same<decltype(t), rawT &>::value << '\n'; }

另外,请考虑为变量使用专有名称:

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

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

[编辑澄清]

writer应该使用参数来指定保存是以SaveEntry还是SaveAs完成的。首次保存应始终为Save。文件名也应该保存在上下文中(您的表单类,但最好有一个“视图模型”)

SaveAs