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;
}
}
从您提供的代码中我可以看到,当您反序列化一个对象时,您将其分配给类变量的静态字段:
Variables.oHistorique = (CHistorique)oSerialize.DeSerializeObject(location.FileName);
但是当你在保存上序列化对象时,你尝试通过CHistorique.GetInstance()
访问它,因为我可以猜测返回类历史的静态字段(因为它看起来像单例模式)。但是从你提供的代码中,我没有看到Variables.oHistorique
和CHistorique.GetInstance()
之间有任何联系,所以问题可能出在这里。您只是序列化空变量,所以文件是空的。
我找到了答案我取代了
oSerialize.SerializeObject(CHistorique.GetInstance(),location.FileName);
oSerialize.SerializeObject(Variables.oHistorique,location.FileName);