如何使用C#在ASP.NET中覆盖(而不是追加)文本文件

4
我在我的网站中包含了一个文本文件,其中有多行内容。 我在页面上放置了一个文本框(Multimode=true)和一个按钮。 在 Page_Load 中,应该在文本框中显示 textFile 的内容。 然后用户可以编辑文本框。单击按钮后,当前文本框的内容应该覆盖在那个文本文件中(不应追加)。
我已经成功地在文本框中显示文本文件数据。但是在覆盖时,它会追加到文本文件中而不是覆盖。
这是我的代码:
protected void Page_Load(object sender, EventArgs e)
{
    if (File.Exists(Server.MapPath("newtxt.txt")))
    {
        StreamReader re = new StreamReader(Server.MapPath("newtxt.txt"));
        while ((input = re.ReadLine()) != null)
        {
           TextBox1.Text += "\r\n";
           TextBox1.Text += input;              
        }
        re.Close();
    }

    else
    {
        Response.Write("<script>alert('File does not exists')</script>");
    }       
}

protected void Button1_Click(object sender, EventArgs e)
{
    StreamWriter wr = new StreamWriter(Server.MapPath("newtxt.txt"));
    wr.Write("");
    wr.WriteLine(TextBox1.Text);
    wr.Close();
    StreamReader re = new StreamReader(Server.MapPath("newtxt.txt"));
    string input = null;
    while ((input = re.ReadLine()) != null)
    {
        TextBox1.Text += "\r\n";
        TextBox1.Text += input;
    }
    re.Close();
} 

如何在同一按钮点击中覆盖文本文件并将其显示在TextBox中?
4个回答

7

StreamWriter 构造函数有多个重载,其中一个是用于指定是追加还是覆盖的。

StreamWriter wr = new StreamWriter(Server.MapPath("newtxt.txt"), false);

来自MSDN,第二个参数:

确定是否要将数据附加到文件。如果文件存在且append为false,则文件将被覆盖。如果文件存在且append为true,则数据将附加到文件中。否则,将创建一个新文件。


我使用了“false”,但它仍然给出了附加的输出。相反,文本被重复了3次。为什么会这样混淆呢? - Brite Roy
你有调试它并看到写入文件时 TextBox1.Text 的值吗?StreamWriter 将使用 false 参数覆盖文件内容,所以我猜你在那之前必须多次添加 TextBox1.Text。Joe 建议添加 TextBox1.Text = ""; 应该会解决它。 - Michael Low

5

Server.MapPath返回一个字符串,其中包含文件的路径。在将其传递给流编写器之前,您可以手动尝试打开该文件。请注意使用Create的FileMode,以及WriteFileAccess

var path = Server.MapPath("newtxt.txt");
using (var fileStream = File.Open(path, FileMode.Create, FileAccess.Write))
{
    using (var writer = new StreamWriter(fileStream))
    {
        // the rest of your code
    }
}

感谢安迪先生的回答,我只是在尝试并表达。 - Brite Roy

3

查看System.IO.File.WriteAllText方法,它可以在一行代码中覆盖文件,如果文件存在的话。同样地,您可以使用System.IO.File.ReadAllText方法轻松获取文件的内容。

protected void Page_Load(object sender, EventArgs e)
{
    if (File.Exists(Server.MapPath("newtxt.txt")))
    {
        TextBox1.Text = System.IO.File.ReadAllText("newtxt.txt");
    }
    else
    {
        Response.Write("<script>alert('File does not exists')</script>");
    }       
}

protected void Button1_Click(object sender, EventArgs e)
{
    System.IO.File.WriteAllText("newtxt.txt", TextBox1.Text);
} 

1

在您的按钮单击处理程序中,您似乎正在覆盖文件,然后将其内容附加到文本框中。通过这种方式,客户端会认为您已将内容附加到文件中。

请尝试在写入文件并在读取文件之前,在按钮单击处理程序中执行以下操作:

TextBox1.Text = "";

或者干脆不要再读回来 - 因为你写入文件的文本仍然在文本框中,所以没必要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接