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

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

不,我希望能够将此树视图的内容保存到文件中(基本上是一个文本文件,我称之为* .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属性,但后来我很难读回来(老实说我不知道​​怎么做)。

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

谢谢。

您可以使用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().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).ToArray(); tree.Nodes.AddRange(nodeList); } }