将树视图的内容保存到文件并稍后加载

时间:2011-05-03 11:30:59

标签: c# winforms serialization treeview

在我的C#WinForms程序中,我有一个仅包含父节点的树视图(因此,没有子节点)它就像一个列表框但我需要它,因为它具有名称,标记和文本等节点的不同属性。

不,我希望能够将此树视图的内容保存到文件中(基本上是一个文本文件,我称之为* .MVIA)。问题是在文件中保存节点的所有三个属性的最佳方法是什么,以便以后可以再次加载?

目前我提出了这个想法:

    private void menuFileSave_Click(object sender, EventArgs e)
    {
        StringBuilder sb = new StringBuilder();

        foreach(TreeNode node in treeViewFiles.Nodes)
        {
            sb.AppendLine(node.Name);
        }

        SaveFileDialog saveList = new SaveFileDialog();

        saveList.DefaultExt = "*.mvia";
        saveList.Filter = "MVIA Files|*.mvia";

        if (saveList.ShowDialog() == DialogResult.OK)
        {
            File.WriteAllText(saveList.FileName, sb.ToString());
        }            
    }

如您所见,每个节点的每个Name属性都将保存在一行中。现在我还需要添加它的Text和Tag属性,但后来我很难读回来(老实说我不知道​​怎么做)。

您能否给我一些想法,保存每个节点的所有三个属性的最佳方法是什么?以后能够轻松加载它?

感谢。

1 个答案:

答案 0 :(得分:19)

您可以使用BinaryFormatter序列化/反序列化节点

    public static void SaveTree(TreeView tree, string filename)
    {
        using (Stream file = File.Open(filename, FileMode.Create))
        {
            BinaryFormatter bf = new BinaryFormatter();
            bf.Serialize(file, tree.Nodes.Cast<TreeNode>().ToList());
        }
    }

    public static void LoadTree(TreeView tree, string filename)
    {
        using (Stream file = File.Open(filename, FileMode.Open))
        {
            BinaryFormatter bf = new BinaryFormatter();
            object obj = bf.Deserialize(file);

            TreeNode [] nodeList = (obj as IEnumerable<TreeNode>).ToArray();
            tree.Nodes.AddRange(nodeList);
        }
    }