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

时间:2011-04-09 06:22:54

标签: c# asp.net

我在我的网站中添加了一个包含多行的文本文件。 我在页面中放了一个文本框(Multimode = true)和一个按钮。 在Page_Load上,textFile中的内容应显示在文本框中。 然后用户可以编辑文本框。单击按钮时,应在该文本文件中覆盖TextBox的当前内容(不应附加)。

我在文本框中成功显示了文本文件数据。但是在覆盖时,它会附加在文本文件中,而不是覆盖。

这是我的代码:

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();
} 

如何覆盖文本文件,然后在同一个按钮上单击文本框中显示它?

4 个答案:

答案 0 :(得分:6)

StreamWriter构造函数有几个重载,包括一个指定是否追加或覆盖。

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

From MSDN,第二个参数:

  

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

答案 1 :(得分:5)

Server.MapPath返回一个包含文件路径的字符串。您可以尝试手动打开文件,然后再将其传递给流编写器。请注意“创建”的FileModeWrite的{​​{3}}。

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
    }
}

答案 2 :(得分: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);
} 

答案 3 :(得分:1)

您似乎正在覆盖Button Click处理程序中的文件,然后将其内容附加到TextBox。通过这种方式,客户端看起来已经附加到文件中。

在写入文件之后,在阅读之前尝试按钮单击处理程序中的以下内容:

TextBox1.Text = "";

或者只是不要费心阅读它 - 没有多大意义,因为您写入文件的文本仍然在TextBox中。