我有一个我不知道如何解决的问题。
我有一个打开OpenFileDialog来添加数据的窗体。
但是在我调用OpenFileDialog.Show()之后,我无法使用BinaryFormatter.Serialize保存任何内容。
奇怪的是,我什至不需要使用OpenFileDialog中的数据,只需打开对话框,然后再调用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
}
}
使用OpenFileDialog:
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保存之前,我在OpenFileDialog上调用了Dispose。
当我注释掉btnPhoto_Click的内容时,BinaryFormatter.Serializer起作用。
我会提出任何想法的。
最佳答案
我没有使用绝对路径保存文件,而仅使用文件名保存了文件。使用OpenFileDialog时,将更改当前目录和数据,将数组存储在当前目录中,该目录与程序开始处的位置完全不同。
当我重新启动程序时,当前目录被重置,所有数据似乎都被丢弃了。
link中描述了一种解决方案
或者只是将当前目录保存在字段link中
关于c# - Form.OpenFileDialog使BinaryFormatter.Serialize停止工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3369636/