【问题标题】:How do i write from textBox the text to text file and read back from the file to the textBox?我如何从文本框将文本写入文本文件并从文件读回文本框?
【发布时间】:2013-08-24 10:12:34
【问题描述】:

这是我在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',因为它正被另一个进程使用

我想做的是:

在文本框中实时键入任何文本时,它会将其保存到文本文件中。 当我退出程序并再次运行它时,从文本文件中读取/加载文本并将其添加/放入文本框中。

所以文本文件应该每次只包含一个字符串,每次运行程序时它应该读取/加载字符串回文本框。

【问题讨论】:

  • 实时将内容写入文件确实是个坏主意。我们通常会定期写入一些更改过的数据块。
  • 每次文本更改时,您都会在事件处理程序中重新打开文件,但不会关闭/释放它。

标签: c# winforms textbox


【解决方案1】:

不需要 StreamWriter 或 StreamReader,不需要太多杂乱和样板。

我建议

   txtSettings.Text = System.IO.File.ReadAllText(path_to_file);

在文本框中的 Leave 或 Validated 事件上

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

不要在每个 TextChanged 事件上写入文件,否则它会在每次击键时写入文件,这将被证明是一个主要瓶颈。在离开时写入文件或(Form_Closed,如果它在对话框中)或使用计时器定期保存到文件(并使用您在 TextChanged 事件中设置为 true 的布尔值跟踪更改)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多