VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > C#教程 >
  • [转]C#StreamWriter、StreamReader与FileStream的关闭总结

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将产生异常。

出处:https://blog.csdn.net/qq_30725967/article/details/90635045


相关教程