日期:2014-05-18  浏览次数:20708 次

请问,StreamWriter使用Using语句
string s1 = @"D:\iosample\pp.txt";  
 using (StreamWriter sw = new StreamWriter(s1, false, Encoding.GetEncoding("gb2312")))  
  {
  sw.WriteLine("我好想熊");
  }

使用using语句的作用我也知道,使用完之后自动释放资源

可是,并没有说一定要使用啊,向下面这样:

StreamWriter sw = new StreamWriter(s1, false, Encoding.GetEncoding("gb2312"))
sw.WriteLine("我好想熊");

为什么写文本写不进去呢?并没有说一定要使用using语句啊。

------解决方案--------------------
StreamWriter sw = new StreamWriter(s1, false, Encoding.GetEncoding("gb2312"))
sw.WriteLine("我好想熊");
sw.Flush();
sw.Close();
------解决方案--------------------
StreamWriter sw = new StreamWriter(s1, false, Encoding.GetEncoding("gb2312"))
sw.WriteLine("我好想熊");
使用完了sw,需要关闭流
添一句
sw.Close();
因为必须调用 Close 以确保所有数据正确写出到基础流中。
详情参考MSDNhttp://msdn.microsoft.com/zh-cn/library/system.io.streamwriter.close(v=vs.95)
------解决方案--------------------
加上 sw.Close(),
------解决方案--------------------
1.打开盒子
2.装入东西
3.关上盒子

要完整
------解决方案--------------------
在VS里不用考虑是否关闭流,会自动关闭的!
------解决方案--------------------
假设经常多用户访问此文件,那么及时关闭此Stream可定可以提搞成功了。

简单地写sw.Close();是不足够的,因为当出现异常时,这个Close就根本不执行。所以这种写法不对。你所说的“写Using而不写Close”才是真正可以保证即使抛出异常时也可以及时Close的。楼上不写Using而写Close的代码,全都忘记了类似Using一样“在抛出异常时也要执行Close”这个要求。
------解决方案--------------------
那么及时关闭此Stream可定可以提搞成功了 --> 那么及时关闭此Stream肯定可以提高成功率

打个比方说,假设经常有几十个线程同时写入同一个文件,遇到异常就不再写入了(或者等待一段时间之后才写入)。你可以拿个纸笔笔划一下,当你写Using{}的时候,由于可以确保“即使出错也能立刻关闭sw”,那么其它写入线程就能顺利成功;而假设当出现异常时你的代码并不执行sw.Close,那么此后的一大堆线程就连锁反应出现了错误,这就是灾难性的。

所以需要写using{}。
------解决方案--------------------
StreamWriter sw = new StreamWriter(s1, false, Encoding.GetEncoding("gb2312"))
sw.WriteLine("我好想熊");
sw.Flush();
sw.Close();