我有一个问题,我不知道如何解决。
我有一个窗体打开一个OpenFileDialog来添加数据。
但我调用OpenFileDialog.Show()后,我无法保存任何与BinaryFormatter.Serialize。
奇怪的是,我甚至不需要使用我从OpenFileDialog获得的数据,只是打开对话框让后续调用Serialize停止工作。Form.OpenFileDialog使BinaryFormatter.Serialize停止工作
停止工作意味着不保存新数据。
我没有收到任何错误消息或异常,它只是默默地失败。
有没有人有任何问题的时候可以指点。
当我添加OpenFileDialog并切换到BinaryFormatter.Serialize时,我使用了XmlSerializer,希望它能更好地抵抗我所遇到的任何问题,所以我非常确定它会影响XmlSerializer。
我使用.NET 4.0
相关的代码(我希望)是:
节省:
public void Save()
{
File.Delete(fileName);
using (Stream stream = File.Open(fileName, FileMode.Create))
{
BinaryFormatter bin = new BinaryFormatter();
bin.Serialize(stream, contactList);
}
}
负载:
private void LoadContactList()
{
if (File.Exists(fileName))
{
using (Stream stream = File.Open(fileName, FileMode.Open))
{
BinaryFormatter bin = new BinaryFormatter();
contactList = (List<Contact>)bin.Deserialize(stream);
}
}
else
{
// start on a new database
}
}
使用打开文件对话框中:
private void btnPhoto_Click(object sender, EventArgs e)
{
if (DialogResult.OK == ofdPhoto.ShowDialog(this.Parent))
{
// signalling that the dialog have been used have have
// useful data
ofdPhoto.Tag = (object)true;
}
}
我所节省的列表:
List<Contact> contactList;
我只有人在列表中
[Serializable]
public class Person : Contact
{
#region variables and properties
//public string Photo { get; set; }
public string Photo;
private string lastName;
public string LastName
{
get { return lastName; }
set { lastName = value; base.ComparisonKey = value; }
}
public string FirstName { get; set; }
// no contructor
}
编辑
在节目的最后,我保存所有数据:
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
data.Save();
}
我得到的文件名路径OpenFileDialog
是一张照片。
该路径被剥离,只存储文件名。我已经检查了这部分。
文件名存储在Person对象中,Person对象存储在List
中,并且在程序结束时整个数组被保存。
编辑完
它不依赖于弦上我加载
编辑的格式为:我呼吁处置在打开文件对话框之前,我保存与BinaryFormatter.Serializer
当我注释掉btnPhoto_Click的内容BinaryFormatter.Serializer工作。
我会appriciate任何想法。