0

我正在尝试从两个文本框中获取数据,并将其写入文件,而不是在按下按钮时替换已经存在的当前内容。这是我到目前为止所拥有的:

private void button1_Click_1(object sender, EventArgs e)
    {
        using (StreamWriter sw1 = new StreamWriter("DataNames.txt"))
        {
            sw1.WriteLine(textBox1.Text);
        }

        using (StreamWriter sw2 = new StreamWriter("DataNumbers.txt"))
        {
            sw2.WriteLine(textBox2.Text);
        }    
    }

现在它接受输入,并替换文件中当前的任何内容,因此只有一行,而不仅仅是将其添加到列表中。谢谢您的帮助。

4

5 回答 5

4
//using (StreamWriter sw1 = new StreamWriter("DataNames.txt"))
//{
//   sw1.WriteLine(textBox1.Text);
//}
System.IO.File.AppendAllText("DataNames.txt", textBox1.Text);
于 2013-08-23T19:09:24.020 回答
2

使用StreamWriter Constructor (String, Boolean)构造函数并传递true用于追加。

true 将数据附加到文件中;false 覆盖文件。如果指定的文件不存在,则该参数无效,构造函数创建一个新文件。

在您的代码中传递 true ,例如:

using (StreamWriter sw1 = new StreamWriter("DataNames.txt",true))
于 2013-08-23T19:09:21.957 回答
1

试试这个

using (StreamWriter sw2 = new StreamWriter("DataNumbers.txt", true))
{
    sw2.WriteLine(textBox2.Text);
}

第二个参数true告诉文件需要附加而不是覆盖。StreamWriter(字符串,布尔值)

于 2013-08-23T19:09:25.443 回答
0

您正在制作两个单独的流编写器实例,并且它们都试图写入同一个文件,因此它们相互竞争 - 这就是您看到覆盖的原因。

如果要在文件末尾添加文本,最好的方法可能是 File.AppendAllText:http: //msdn.microsoft.com/en-us/library/ms143356.aspx

private void button1_Click_1(object sender, EventArgs e)
{
    System.IO.File.AppendAllText("DataNames.txt", textBox1.Text + textBox2.Text);
}

如果您正在执行较小的、相对不频繁的追加,则 AppendAllText 非常有用,因为您可以不加思索地将字符串发送到其中,而不是确保您正在使用流编写器。

于 2013-08-23T19:10:42.217 回答
0

切换

新 StreamWriter("DataNumbers.txt")

File.CreateText("DataNames.txt")

您可以在以下位置找到更多信息:

http://msdn.microsoft.com/en-us/library/system.io.file.appendtext.aspx

于 2013-08-23T19:13:20.787 回答