2015-06-11 84 views
-1

我試圖將所有TreeNodesText="Group"從我的TreeView保存到文件。我可以用Text="Group"打印所有TreeNodes,但是當我添加一個StreamWriter加上文件名時,結果是一個空白文件。我確信有一個或多個TreeNodes哪個名稱是Group,所以這不成問題。我如何修復我的代碼?將所有TreeView節點寫入文本文件

該文件的結果可以是這樣的,例如

組1

組0

編輯:

我發現我在加入streamWriter.Close();修復CreateSiveFile方法的結尾,現在它工作。

代碼

public void CreateSaveFile(string fileName ,TreeView treeView) 
    { 
     StreamWriter streamWriter = new StreamWriter(fileName); 
     // Print each node recursively. 
     TreeNodeCollection nodes = treeView.Nodes; 
     foreach (TreeNode n in nodes) 
     { 
      WriteRecursive(streamWriter, n); 
     } 
    } 

    public void WriteRecursive(StreamWriter writer, TreeNode treeNode) 
    { 
     if (treeNode.Text == "Group") 
     { 
      writer.WriteLine(String.Format("{0} {1}", treeNode.Text, treeNode.Nodes.Count)); 
      // Print each node recursively. 
      foreach (TreeNode tn in treeNode.Nodes) 
      { 
       WriteRecursive(writer,tn); 
      } 
     } 
    } 

回答

0

恭喜上發現的問題!如果你不介意的話,我會指出一個有用的(和最佳實踐)技術,你可以在這樣的事情上使用。

因爲StreamWriter執行IDisposable,所以最好用using語句來實現它。並且對於實現IDisposable的任何事情,您應該使用using或明確呼叫.Dispose(),讓CLR知道釋放其資源。這不是只是是一個最佳實踐,但在這種情況下,這樣做會解決流無法關閉的問題,因爲當using語句關閉時,它隱含地調用streamWriter.Dispose(),這隱含地調用streamWriter.Close()。 (爲便於閱讀,你可以在那裏,如果你想離開顯式調用streamWriter.Close()。)

這裏的推薦方式,與using

public void CreateSaveFile(string fileName, TreeView treeView) 
{ 
    using (StreamWriter streamWriter = new StreamWriter(fileName)) 
    { 
     // Print each node recursively. 
     TreeNodeCollection nodes = treeView.Nodes; 
     foreach (TreeNode n in nodes) 
     { 
      WriteRecursive(streamWriter, n); 
     } 
     streamWriter.Close(); // Optional since we have "using", but good practice to include. 
    } 
} 
+0

我知道'using'語句,我是有在之前,但感謝提醒 – Sybren