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文件中。
您可以使用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;
}