我搜索了互联网并查看了很多帖子,但没有一个对我有帮助。所以我决定在这里问我自己的问题。
单击表单上的保存按钮时,我正在将一些数据写入二进制文件,并在从表单打开文件时从文件中读取该数据。数据包括来自一些文本框和两个列表的文本。我创建了一个保存方法,它具有以下代码:
BinaryWriter writer = new BinaryWriter(new FileStream(savedFileName, FileMode.Create, FileAccess.Write));
writer.Write(Database.firstName);
writer.Write(Database.middleName);
writer.Write(Database.lastName);
writer.Close();
我有另一种通用方法来编写具有以下代码的列表:
private void writeDGVrowListToBinaryFile(List<DGVrow> list, BinaryWriter R)
{
Nrows = list.Count;
R.Write(Nrows);
for (int i = 0; i < Nrows; i++)
{
DGVrow dgvr = list[i];
R.Write(dgvr.Day);
R.Write(dgvr.FromTime);
R.Write(dgvr.ToTime);
}
R.Close();
}
因为我有两个列表,所以我将这两行添加到 Save 方法的writer.Close()
行之前,将第一个代码更改为:
BinaryWriter writer = new BinaryWriter(new FileStream(savedFileName, FileMode.Create, FileAccess.Write));
writer.Write(Database.firstName);
writer.Write(Database.middleName);
writer.Write(Database.lastName);
writeDGVrowListToBinaryFile(Database.officeHoursList, writer);
writeDGVrowListToBinaryFile(Database.classScheduleList, writer);
writer.CLose();
问题是,当代码到达 时R.Write(Nrows);
,它会抛出ObjectDisposedException
并说它无法访问已关闭的文件。是什么导致文件此时关闭?以及如何防止文件关闭?
当阅读作为阅读使用与写作相同的模式时,也会出现同样的问题。