2011-05-03 14 views
8

C# WinForms programımda, yalnızca ana düğümler içeren bir ağaç görünümüm var (bu nedenle, hiçbir childs), bir liste kutusu gibidir, ancak bunun farklı özelliklere sahip olmasından dolayı buna ihtiyacım vardı İsim, Etiket ve Metin gibi düğümler.Bir ağaç görünümünün içeriğini bir dosyaya kaydetme ve daha sonra yükleme

Hayır Bu ağaç izinin içeriğini bir dosyaya kaydedebilmeyi istiyorum (Temel olarak onu doldurulan bir metin dosyası * .MVIA). Soru, bir dosyadaki tüm düğümlerin üç özelliğini kaydetmenin en iyi yoludur, böylece daha sonra yeniden yüklenebilir. Ben bu fikri ile geldi Şu anda

: Gördüğünüz gibi

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

, her düğümün her Name özelliği bir satıra kaydedilir. Şimdi Metin ve Etiket özelliğini de eklemeliyim, ancak daha sonra onu geri okumada sorun yaşıyorum (Dürüstçe nasıl yapacağımı bilmiyorum).

Bana her düğümün üç özelliğini korumak ve daha sonra kolayca yükleyebilmenin en iyi yolu nedir diye bir fikir verir misiniz?

Teşekkürler.

+1

Yaz bilgileri seri hale getirilmeye düğümleri BinaryFormatter kullanabilirsiniz; sınıf Düğümü {String Name; Dize Metni; Dize Etiketi;}}. Daha fazla XML serileştirme kullanabilirsiniz. Bildiğim en evrensel yoldur. – alehro

+0

@alhero Teşekkürler, ama benim için biraz karmaşık, bazı kod örnekleri verebilir misiniz? –

+0

alehro, ['XmlSerializer'] 'a atıfta bulunuyor (http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx). Bu sayfada oldukça az örnek kod var. – Timwi

cevap

17

Sen _ sınıf Ağacı {Liste gibi bir şey için/Deserialize Düğümler

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

Teşekkürler, mükemmel çalışıyor! –

İlgili konular