ファイルを開くときにpbしてから再保存する

私はメッセージを暗号化/ハッシュするプログラムを作成しています

I have a list that contains (date,user,encryption,
message,encryptedmessage) =>
Variables.oHistorique.Liste_historique.

メッセージを暗号化して保存すると、正常に保存されますが、そのファイルを開くとリストにはすべての情報が含まれていますが、ファイルを開いて新しい名前で保存しても空です。
私は得ることができるすべての助けに感謝します ありがとう

P.S 私はチェックして、リストは私が保存したときに、私が新しく保存されたファイルを開くとき

// openをクリックすると

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

// saveをクリックすると:

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

    }

//ここに私のクラスがあります

 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の静的フィールドに割り当てたとき、

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

しかし、保存時にオブジェクトをシリアライズするときには、
CHistorique.GetInstance()を使ってアクセスしようとしますが、シストンクラスの静的フィールド(シングルトンパターンのように見えるので)を返します。しかし、あなたが提供したコードからは、
Variables.oHistorique
CHistorique.GetInstance()との間には何の関係もないので、ここに問題があるかもしれません。あなたは単純に空変数をシリアライズするので、ファイルは空です。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です