gpt4 book ai didi

c# - Form.OpenFileDialog 使 BinaryFormatter.Serialize 停止工作

转载 作者:太空宇宙 更新时间:2023-11-03 14:28:04 26 4
gpt4 key购买 nike

我有一个问题,我不知道如何解决。
我有一个打开 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:

List<Contact> contactList;

列表中只有Person

[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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com