StreamWriter has a Bug?
本文关键字:Bug has StreamWriter | 更新日期: 2023-09-27 17:51:07
这只是将文本框中的文本每次写入同一个文件…我不明白为什么它工作完美,如果我输入新的字符或改变字符,而删除字符不工作…
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);
}
您没有关闭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);
}
简而言之:您需要像以下示例一样通过using
关键字重新编写代码。因为它可以防止泄漏,并且是处理。net框架中非托管资源的推荐方法。
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
}
Edit:在您的代码示例中,您打开了FileStream
,但没有关闭它,这会导致问题。因此,使用方便的using语句来防止这种情况的发生是一种可行的方法。否则,您只需要关闭您的filstream或任何非托管资源。
我找到原因了。
我使用的StreamWriter构造函数不能将属性"append"设置为false,所以每次我都重写现有的文本,而不是从头开始。
由于我必须使用FileStream多线程的原因,我想我必须找到另一种方式来写文件