2011-05-05 6 views
1

私のC#WinFormsではツリービューがあり、TreeViewのコンテンツをシリアライズされたファイルとして保存します。だから私は今、素敵なセーブとロードの機能を持っているシリアライズされたコントロールのコンテンツに余分なデータをコメントとして追加する

シリアライズし

List<TreeNode> treeNode = new List<TreeNode>(); 

foreach (TreeNode node in treeViewFiles.Nodes) 
{ 
    treeNode.Add(node); 
} 

//Serialize az binary 
using (Stream file = File.Open(saveList.FileName, FileMode.Create)) 
{ 
    BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(file, treeNode); 
} 

デシリアライズし、負荷

BinaryFormatter bf = new BinaryFormatter(); 

object obj = bf.Deserialize(file); //file is path to file (came from openfiledialog 
TreeNode[] nodeList = (obj as IEnumerable<TreeNode>).ToArray(); 

//Add nodes to tree 
treeViewFiles.Nodes.AddRange(nodeList); 

質問

を保存します。ここに私のコードですしかし、私が必要とするのは、それらのデータを同じファイルにコピーします。たとえば、いくつかの文字列を同じファイルに追加したい場合、それらがロードされると、メッセージボックスがポップアップし、このファイルを保存したユーザーの名前や他のものが表示されます。それは可能でしょうか?任意のヒントとコードは大歓迎です!

答えて

3

あなたは間違った方法を考えています。シリアライズされたファイルに注釈を追加しようとするのではなく、シリアライズするデータをカプセル化してシリアライズするために必要な追加情報で新しいシリアライズ可能クラスを作成するだけです。そして、例えば

public class SavedData<T>{ 
    private List<T> _nodes; 
    private DateTime _saveTime; 

    public List<T> Nodes{ 
    get{ return _nodes;} 
    } 

    public DateTime SaveTime{ 
    get{return _saveTime;} 
    } 

    public SavedData(List<T> nodes, string savedBy){ 
    _nodes = nodes; 
    _savedBy = savedBy; 
    _saveTime = DateTime.Now; 
    } 
} 

を代わりに私はそれのいずれかをコンパイルしようとしていないが、それはおそらくほとんどがそうです....

+0

SavedData

BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(file, new SavedData<TreeNode>(treeNode)); 

を保存TREENODE保存しますありがとう、ええ、私は間違った方法で考えていたと思う!私はすぐにこれを試みます。現時点では、フィールドの前にそのアンダースコアが何であるかを伝えることができますか? –

+0

これは私たちが仕事場で使うコーディングの標準です。プライベートフィールドを表しています。それはあなたが働いているものがクラスにプライベートであることを知ることのちょっとした素早い方法です。 –