2013-08-24 189 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的布尔值跟踪更改)。

相关问题