[转]C#StreamWriter、StreamReader与FileStream的关闭总结

原文链接:StreamWriter、StreamReader与FileStream的关闭总结——CSDN

StreamReader及StreamWriter类中包含一个私有的Stream,

  1. 如果你使用public StreamReader(string path)和public StreamWriter(string path);这个构造函数,StreamReader和StreamWriter会主动创建一个FileStream
  2. 如果你使用public StreamReader(Stream stream)或public StreamWriter(Stream stream);这个构造函数,StreamReader或StreamWriter则不会再创建FileStream而是直接使用你传入的Stream
  3. 在上述两种情况下,** StreamReader或StreamWriter在Close的时候都会关闭FileStream**。

实例代码:

FileStream fs = new FileStream(@"C:\A.txt" , FileMode.OpenOrCreate);
          StreamWriter sw = new StreamWriter(fs);
          sw.Close( );
          fs.Close( );

在 sw.Close( );执行完毕后,其实fs已经被关闭了。因此 fs.Close( );其实是可以省略的。
当然,这样的写法不会有任何问题,因为Dispose不会被执行两次。

但是:

FileStream fs = new FileStream(@"C:\A.txt" , FileMode.OpenOrCreate);
          StreamWriter sw = new StreamWriter(fs);
          fs.Close( );
          sw.Close( ); 

会报错。
原因: sw.Close( ); fs.Close( );
这两行代码不可以交换顺序,如果先执行 fs.Close( );再执行 sw.Close( );将引发异常。
因为在StreamWriter的Close函数调用过程中,将调用Flush函数,而此时fs已经被关闭,Flush将产生异常。

posted @   二次元攻城狮  阅读(1335)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
  1. 1 烟花易冷 小柔Channel
  2. 2 红颜如霜 江壹纯
  3. 3 不谓侠 小桃Channel
  4. 4 小小恋歌 新坦结衣
  5. 5 神预言 袁娅维TIARAY
红颜如霜 - 江壹纯
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.
点击右上角即可分享
微信分享提示
主题色彩