C# pb打开文件,然后重新保存

C# pb打开文件,然后重新保存,c#,serialization,save,C#,Serialization,Save,我正在创建一个加密/哈希消息的程序 我有一个包含(日期、用户、加密、消息、加密消息)的列表 =>Variables.oHistorique.Liste_historique 当我只是加密邮件然后保存时,它工作正常,当我打开该文件时,列表包含所有预期信息。但是,如果我打开一个文件,然后重新保存它(即使使用新名称),它是空的,列表是空的。 我感谢所有能得到的帮助 谢谢 附言 我已选中,并且在保存时填充列表,但在打开新保存的文件时不填充列表 //当我单击“打开”时 private void ouvr

我正在创建一个加密/哈希消息的程序

我有一个包含(日期、用户、加密、消息、加密消息)的列表 =>Variables.oHistorique.Liste_historique

当我只是加密邮件然后保存时,它工作正常,当我打开该文件时,列表包含所有预期信息。但是,如果我打开一个文件,然后重新保存它(即使使用新名称),它是空的,列表是空的。 我感谢所有能得到的帮助 谢谢

附言 我已选中,并且在保存时填充列表,但在打开新保存的文件时不填充列表

//当我单击“打开”时

 private void ouvrirToolStripMenuItem_Click(object sender, EventArgs e)
    {
        FileDialog location = new OpenFileDialog();
        location.Filter = "Data Files (*.dat)|*.dat";
        location.FilterIndex = 1;
        result = location.ShowDialog();

        if (result == DialogResult.OK)
        {
          dataGridView1.Rows.Clear();
          Variables.oHistorique = (CHistorique)oSerialize.DeSerializeObject(location.FileName);
          for (int i = 0; i < Variables.oHistorique.Liste_historique.ToArray().Length; i++)
          {
              dataGridView1.Rows.Add(Variables.oHistorique.Liste_historique[i].Date, Variables.oHistorique.Liste_historique[i].User, Variables.oHistorique.Liste_historique[i].Type, Variables.oHistorique.Liste_historique[i].Chaine, Variables.oHistorique.Liste_historique[i].ChaineCrypt);
          }
          dataGridView1.CurrentCell = null;  
        }
    }
//这是我的类序列化

 class CSerialize
{

    private static CSerialize Instance;

    private CSerialize()
    {

    }

    public void SerializeObject(object o, string file)
    {
        Stream stream = File.Open(file, FileMode.Create);
        BinaryFormatter b = new BinaryFormatter();
        b.Serialize(stream, o);
        stream.Close();
    }
    public object DeSerializeObject(string file)
    {
        Object o;
        Stream stream = File.Open(file, FileMode.Open);
        BinaryFormatter b = new BinaryFormatter();
        o = b.Deserialize(stream);
        stream.Close();
        return o;
    }
    public static CSerialize GetInstance()
    {
        if (Instance == null)
        {
            Instance = new CSerialize();
        }
        return Instance;
    }
}

从您提供的代码中,我可以看到,当您反序列化一个对象时,您将其分配给类变量的静态字段:

Variables.oHistorique = (CHistorique)oSerialize.DeSerializeObject(location.FileName);
但当您在save上序列化对象时,您尝试通过
CHistorique.GetInstance()
访问它,我猜它返回类CHistorique的静态字段(因为它看起来像单例模式)。但从您提供的代码中,我看不到
变量.oHistorique
CHistorique.GetInstance()
之间有任何联系,所以问题可能就在这里。您只需序列化空变量,所以文件是空的。

我找到了答案 我换了

oSerialize.SerializeObject(CHistorique.GetInstance(),location.FileName);


您是否在调试器中执行了代码,并在保存例程中查看了相关对象的内容?我不知道您所说的相关对象是什么意思,但在调试器中,它正确地输入了if语句并正常地执行了所有操作CHistorique是单例吗?如果您正在将数据文件反序列化为它的第二个实例,那么您的“singleton”实例将不包含反序列化的数据。我为其他有相同问题的人编辑了您的帖子,我找到了解决方案,这要感谢您的帖子非常感谢我非常感谢Mike
oSerialize.SerializeObject(CHistorique.GetInstance(),location.FileName);
oSerialize.SerializeObject(Variables.oHistorique,location.FileName);