2010-07-30 72 views
2

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

回答

1

我没有保存我的文件的绝对路径,但只有一个文件名。当使用OpenFileDialog时,当前目录被更改并且数据,数组被存储在当前目录中,该目录与程序开始时完全不同。

当我重新启动程序,当前目录被重置,所有的数据似乎被扔掉。
在此描述了一种解决方案link
或者只是将当前目录保存在一个字段中link