我正在使用我所理解的平面文件数据库编写程序。在我的程序中,我反序列化了一组将在程序中使用的对象,并将这些对象加载到列表中。
using (FileStream IStreamRead = new FileStream(Directory.GetCurrentDirectory() + itemFileName, FileMode.Open, FileAccess.Read))
{
if (IStreamRead.Length > 0)
itemRecords = bformatter.Deserialize(IStreamRead) as List<Record>;
}
using (FileStream CStreamRead = new FileStream(Directory.GetCurrentDirectory() + clinicFileName, FileMode.Open, FileAccess.Read))
{
if (CStreamRead.Length > 0)
clinicNames = bformatter.Deserialize(CStreamRead) as List<String>;
}
输出流扩展(用于覆盖文件):
Istream = new FileStream(Directory.GetCurrentDirectory() + itemFileName, FileMode.Create, FileAccess.Write);
Cstream = new FileStream(Directory.GetCurrentDirectory() + clinicFileName, FileMode.Create, FileAccess.Write);
在程序结束时(当用户退出应用程序时),我执行Save方法:
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
//save the state of all record objects, as well as clinic names
if (itemRecords.Count > 0)
bformatter.Serialize(Istream, itemRecords);
if (clinicNames.Count > 0)
bformatter.Serialize(Cstream, clinicNames);
}
在FormClosing事件处理程序中调用save方法以确保保存所有对象,但如果已进行任何更改,也会提示用户。
private void mainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (dataEdited)
{
DialogResult dialogResult = MessageBox.Show("Would you like to save your edits?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dialogResult == DialogResult.Yes)
{
saveToolStripMenuItem_Click(sender, e as EventArgs);
Istream.Dispose();
Cstream.Dispose();
}
else
{
Istream.Dispose();
Cstream.Dispose();
}
}
else
{
Istream.Dispose();
Cstream.Dispose();
}
}
我遇到的问题是,如果我选择不保存文件,文件中的信息将被删除(或者至少看起来像这样)。例如,我将打开已经在诊所名称文件中保存了一个诊所名称的应用程序,但是如果我在不保存的情况下关闭应用程序,则下次打开应用程序时诊所名称将不会出现。流处理时是否会发生可能导致此问题的事情?