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

本文关键字:文件 IO File WriteAllText System | 更新日期: 2023-09-27 18:26:27

我创建了一个方法,这样当单击按钮(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.RRedirect方法配合使用,只是不能与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文件中。

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

您可以使用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;
}