2013-08-24 141 views
1

這是我在Form1的頂部做:如何從textBox中將文本寫入文本文件並從文件讀回到文本框?

string line; 
StreamWriter w; 
StreamReader sr; 

然後在構造函數中:

if (File.Exists(@"d:\test.txt")) 
      { 
       sr = new StreamReader(@"d:\test.txt"); 
       line = sr.ReadToEnd(); 
       textBox3.Text = line; 
       sr.Close(); 
       sr.Dispose(); 
      } 
      w = new StreamWriter(@"d:\test.txt"); 
在textBox3文本已改變事件

然後:

private void textBox3_TextChanged(object sender, EventArgs e) 
     { 
      if (w == null) 
      { 
       w = new StreamWriter(@"d:\ircbotsettings.txt"); 
       w.Write(line); 
       w.Write(textBox3.Text); 
      } 
     } 

然後在Form1中閉幕事件,並在我在兩個地方添加的按鈕點擊事件:

w.Close(); 
w.Dispose(); 

在textBox文本中改變了事件im試圖再次打開/創建文件以寫入第一個寫入行,如果其中有任何字符串,然後從textBox寫入新的文本。

問題是,當IM運行現在的程序其將自動第一至textBox3文本改變事件,扔就行了異常:

w = new StreamWriter(@"d:\ircbotsettings.txt"); 

該進程無法訪問該文件「d:\ ircbotsettings。 TXT」,因爲它正被另一個進程使用

我想要做的是:

當鍵入實時文本框中任何文本,將其保存到文本文件。 當我退出程序並再次運行時,從文本文件中讀取/加載文本並將其添加/放入文本框中。

所以文本文件應該包含每次只有一個字符串,每次當運行程序時它應該讀取/加載字符串回到文本框。

+0

將內容實時寫入文件是一個糟糕的主意。我們通常定期寫入一些更改的數據塊。 –

+1

每次更改文本時,都會重新打開事件處理程序中的文件,但不會關閉/取消它。 –

回答

2

不需要StreamWriter或StreamReader,太多混亂和樣板。

我建議

txtSettings.Text = System.IO.File.ReadAllText(path_to_file); 
從文本框

,並在離開或驗證的事件

System.IO.File.WriteAllText(path_to_file, txtSettings.Text); 

不要寫在每個TextChanged事件文件,否則會寫入文件每次擊鍵都會成爲主要的瓶頸。可以在Leave或(Form_Closed,如果它在對話框中)寫入文件,或使用Timer定期保存到文件(並使用在TextChanged事件中設置爲true的布爾值跟蹤更改)。

相關問題