System.IO.File.WriteAllText不会写入文件

时间:2014-10-14 21:29:02

标签: c# asp.net

我创建了一个方法,以便在单击按钮(butCommit)时,将获取文本框的值并将其存储到字符串中。然后使用WriteAllText方法将该字符串写入.txt文件。但是,执行此方法时,根本不会修改该文件。

按钮方法工作正常,因为我有一个response.redirect方法,每次都有效。 .txt文件的路径也是正确的,因为我有另一种方法,在页面加载时,将显示.txt文件的当前内容(使用ReadAllText方法)和我用于WriteAllText的完全相同的路径方法

以下是给我提问的代码:

void butCommit_Click(object sender, EventArgs e)
    {
        var path = Server.MapPath(@"~/content.txt");
        string content = txtHomepageContent.Text;
        System.IO.File.WriteAllText(path, content);

        Response.Redirect("Default.aspx");
    }

我将再次重复:上面的方法已初始化,并且可以使用Response.Redirect方法正常工作,而不是WriteAllText方法。

编辑更清晰:

这样做的目的是在站点的主页上显示消息。该消息需要存储在服务器上的.txt文件中(名为content.txt)。在ControlPanel.aspx页面中,用户需要能够使用文本框更改文本文件的上下文。优选地,它们还能够使用相同的文本框查看当前在content.txt中的内容。

我查看位的代码是:

protected void Page_Load(object sender, EventArgs e)
{
    var path = Server.MapPath(@"~/content.txt");
    string content = System.IO.File.ReadAllText(path);
    txtHomepageContent.Text = content;
}

这指定“path”作为content.txt的路径,然后将“content”指定为包含content.txt数据的字符串。之后,它将“内容”放入文本框txtHomepageContent。这也是用于输入content.txt的新数据的文本框。

似乎如果删除上面的代码部分,我现在可以写入文本文件而没有任何问题,但是我当然无法先查看其中的内容。如果我保留上面的代码块,那么忽略我在文本框中写的任何内容,原始文本将被提交回content.txt,导致没有任何更改。

我知道有更简单的方法可以实现这一点,例如存储在数据库中,但要求是在.txt文件中。

1 个答案:

答案 0 :(得分:1)

您可以使用Page_Init事件处理程序而不是Page_Load来初始化文本框(因为提交的回发值将在Init和Load事件之间加载,有效地覆盖了文本框值如果您想留在Page_Load,请先检查是否有回发:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (this.Page.IsPostBack)
       return;

    var path = Server.MapPath(@"~/content.txt");
    string content = System.IO.File.ReadAllText(path);
    txtHomepageContent.Text = content;
}