这简单地每次都将文本框中的文本写入同一个文件...我不明白为什么它在输入新字符或更改字符时完美无缺,而删除字符则不起作用...
private void ContentChanged(object sender, TextChangedEventArgs e)
{
Console.WriteLine("cur before:" + this.Box.SelectionStart);
FileStream f = File.Open(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
StreamWriter writer = new StreamWriter(f);
model.Cursor = this.Box.SelectionStart;
writer.Write(this.Box.Text);
writer.Close();
Console.WriteLine("cur after:" + this.Box.SelectionStart);
Console.WriteLine("write:" + count++);
Console.WriteLine("after write:" + this.Box.Text);
Console.WriteLine("after write:" + model.Content);
}
答案 0 :(得分:4)
你没有关闭f
或刷新 - 数据被完全缓存,这就是为什么它永远不会进入文件。
两个建议:
using
语句与流和作者等可支配资源一起使用File.CreateText
在一次通话中创建TextWriter
- 或者更好的是,使用File.WriteAllText
以避免担心打开和关闭。这样的事情:
private void ContentChanged(object sender, TextChangedEventArgs e)
{
Console.WriteLine("cur before:" + this.Box.SelectionStart);
File.WriteAllText(path, this.Box.Text);
Console.WriteLine("cur after:" + this.Box.SelectionStart);
Console.WriteLine("write:" + count++);
Console.WriteLine("after write:" + this.Box.Text);
Console.WriteLine("after write:" + model.Content);
}
答案 1 :(得分:0)
简而言之:您需要通过using
关键字重新编写代码,如下例所示。因为它可以防止泄漏,并且是在.NET Framework中处理未受管资源的推荐方法。
using(StreamWriter writer = new StreamWriter(Response.OutputStream))
{
writer.WriteLine("col1,col2,col3");
writer.WriteLine("1,2,3");
writer.Close(); //not necessary I think... end of using block should close writer
}
修改:在您的代码示例中,您打开FileStream
但不要关闭它,这会导致问题。因此,使用方便的使用语句来防止这种情况是有必要的。否则,您只需关闭您的filstream或任何未管理的资源。
答案 2 :(得分:0)
我发现了原因。
我使用的StreamWriter构造函数无法将属性“append”设置为false,因此每次我都覆盖现有文本,而不是从头开始。
由于我必须使用FileStream来解决多线程问题,我想我必须找到另一种编写文件的方法。