私はインターネットを検索し、多くの投稿を見ましたが、どれも私を助けませんでした. そこで、ここで自分の質問をすることにしました。
フォームの保存ボタンがクリックされたときにバイナリファイルにデータを書き込み、フォームからファイルが開かれたときにファイルからそのデータを読み取ります。データには、いくつかのテキスト ボックスと 2 つのリストからのテキストが含まれます。次のコードを持つ保存メソッドを作成しました。
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();
}
リストが 2 つあるため、次の 2 行を 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
され、閉じられたファイルにアクセスできないと表示されることです。この時点でファイルが閉じられる原因は何ですか? また、ファイルが閉じないようにするにはどうすればよいですか?
読み取りは書き込みと同じパターンを使用するため、読み取り中に同じ問題が発生します。