这就是我在Form1顶部所做的:
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 Text Changed事件:
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 Closing事件中以及在两个地方添加的按钮点击事件中:
w.Close();
w.Dispose();
在textBox文本中更改了事件我试图再次打开/创建文件以便首先写入该行,如果其中有任何字符串,则从textBox中写入新文本。
问题是当我正在运行程序时,它首先自动进入textBox3文本更改事件并在行上抛出异常:
w = new StreamWriter(@"d:\ircbotsettings.txt");
该进程无法访问文件'd:\ ircbotsettings.txt',因为它正由另一个进程使用
我想做的是:
当实时在textBox中键入任何文本时,它会将其保存到文本文件中。 当我退出程序并再次运行它从文本文件中读取/加载文本并将其添加/放入textBox。
因此文本文件应该每次只包含一个字符串,每次运行程序时,它应该读取/加载字符串回到文本框。
答案 0 :(得分:2)
不需要StreamWriter或StreamReader,太多的混乱和样板。
我建议
txtSettings.Text = System.IO.File.ReadAllText(path_to_file);
以及文本框中的Leave或Validated事件
System.IO.File.WriteAllText(path_to_file, txtSettings.Text);
不要在每个TextChanged事件上写入文件,否则它将在每次击键时写入文件,这将被证明是一个主要的瓶颈。在Leave上写入文件或在对话框中写入Form_Closed,或者使用Timer定期保存到文件中(并使用在TextChanged事件中设置为true的布尔值跟踪更改)。