方法“;添加“;新数据到当前打开的文件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");
}
}
}
提前感谢
这是表格的图片
窗口窗体
如果我理解正确,您想要实现的是附加文本而不是覆盖文本。看看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
}
}