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

C# 方法「;加入“;将新数据添加到当前打开的文件C中#,c#,openfiledialog,savefiledialog,binaryreader,binarywriter,C#,Openfiledialog,Savefiledialog,Binaryreader,Binarywriter,我正在编写一个程序,其中有两个列表框,数据相同,但其中一个列表框项目用学生姓名及其总分更新,另一个列表框项目用学生姓名和学生姓名旁边的每个评委分数更新。到目前为止一切都很好,但现在我被卡住了。。。我有两个方法Save()和SaveAs(),其中Save()自动将数据写入“FormData.bin”,SaveAs()允许用户输入自己的文件名 是否可以重写Save()方法,以便在单击“保存”时将当前数据保存到打开的文件中,就像在键入文档时在MS Word中一样,只需单击“保存”即可将新键入的数据添加

我正在编写一个程序,其中有两个列表框,数据相同,但其中一个列表框项目用学生姓名及其总分更新,另一个列表框项目用学生姓名和学生姓名旁边的每个评委分数更新。到目前为止一切都很好,但现在我被卡住了。。。我有两个方法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");
            }
        }
    }
public void SaveEntry()
{
int itemscont=Math.Min(lstbxstudens.Items.Count,lstbxStudentScore.Items.Count);
saveFileDialog1.InitialDirectory=Application.StartupPath;
saveFileDialog1.FileName=“FormData.bin”;
{
尝试
{
使用(FileStream fs=newfilestream(saveFileDialog1.FileName,FileMode.Create))
使用(BinaryWriter保存=新的BinaryWriter(fs))
{
Save.Write(cmbbxAge.Text);
Save.Write(cmbbxBelt.Text);
Save.Write(cmbbxCategorie.Text);
Save.Write(cmbbxGender.Text);
Save.Write(cmbbxGup.Text);
保存.写入(TXTE1.文本);
保存。写入(txtwitter2.Text);
保存.写入(TXTE3.文本);
Save.Write(txtredge4.Text);
保存。写入(TXTE5.Text);
Save.Write(txtmoperator.Text);
Save.Write(txtPos1.Text);
Save.Write(txtPos2.Text);
Save.Write(txtPos3.Text);
Save.Write(txtPos4.Text);
Save.Write(txtPos5.Text);
对于(int i=0;i
先谢谢你

这是形式的图像


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

也可以考虑使用变量的专有名称:

Save
是一个操作,而不是一个对象<代码>编写器
会更好

通过以代码中显示的方式使用Write,您将以所有文本结尾,并且没有附加分隔符。你应该考虑使用函数。

[澄清后编辑]

SaveEntry
应采用一个参数来指定是以
SaveAs
方式保存还是以
save
方式保存。第一次保存应始终是
SaveAs
。文件名也应该保存在上下文中(您的表单类,但最好有一个“视图模型”)


你能澄清一下你想改进什么/有什么问题吗?大多数程序(包括Word)不会“更新”现有文件,而是始终使用内存中加载的数据(保存/另存为)完全覆盖。所以“like Word”并不是问题的确切解释。您确定要将文本保存到二进制文件中吗?把它拿回来是个问题。如果你想保存,而不是另存为,你不需要一个对话框。保留打开的文件的路径,并将其作为
FileStream()
的第一个参数。
SaveFileDialog
所做的就是让用户通过对话框指定文件路径。好的,例如,当我选择文件名时,例如“FormTesting1.bin”前几天,我打开文件,所有内容都按照我的要求正确加载,但我知道我添加了一些新数据,例如每个评委的学生分数,我只想覆盖旧数据,而不必进入菜单并单击SaveAs(),然后覆盖相同的文件名,而是要保存()方法自动覆盖具有相同文件名(FormTesting1.bin)的旧数据,而它当前覆盖我在代码saveFileDialog1.filename=“FormData.bin”中提供的默认文件名@S.Rojak,我收到一个错误,指出“空路径名不合法”-有什么想法吗?没有WriteLine函数吗?仅(更改为保存为writer)writer.Write();?但一切都很好,因为它是,所有我想要的是同一种功能作为MS Word保存按钮
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
   }
}