Pb时打开文件,然后重新保存

本文关键字:新保存 保存 然后 文件 Pb | 更新日期: 2023-09-27 18:14:16

我正在创建一个加密/散列消息的程序

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

当我只是加密消息,然后保存它的工作很好,当我打开该文件的列表包含所有预期的信息,但如果我打开一个文件,然后重新保存它(即使在一个新的名称下)它是空的,列表是空的。我很感激所有我能得到的帮助由于

p。年代我已经检查过了,当我保存时,列表被填充,但当我打开新保存的文件

时,列表没有填充。

//当我点击打开

 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;  
        }
    }

//当我点击保存时:

private void sauvgarderToolStripMenuItem_Click(object sender, EventArgs e)
    {
        FileDialog location = new SaveFileDialog();
        location.Filter = "Data Files (*.dat)|*.dat";
        location.FilterIndex = 1; 
        result = location.ShowDialog();
        if (result == DialogResult.OK)
        {   
        oSerialize.SerializeObject(CHistorique.GetInstance(),location.FileName);
        }
    }

//这是我的类Serialize

 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;
    }
}

Pb时打开文件,然后重新保存

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

Variables.oHistorique = (CHistorique)oSerialize.DeSerializeObject(location.FileName);

但是当你在保存上序列化对象时,你尝试通过CHistorique.GetInstance()访问它,因为我可以猜测返回类历史的静态字段(因为它看起来像单例模式)。但是从你提供的代码中,我没有看到Variables.oHistoriqueCHistorique.GetInstance()之间有任何联系,所以问题可能出在这里。您只是序列化空变量,所以文件是空的。

我找到了答案我取代了

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

oSerialize.SerializeObject(Variables.oHistorique,location.FileName);