类别:程序开发

日期:2020-05-26 浏览:2171 评论:0

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**。

实例代码:

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

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

但是:

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

本文标题:C#StreamWriter、StreamReader与FileStream的关闭总结
本文链接:https://vtzw.com/post/203.html
作者授权:除特别说明外,本文由 零一 原创编译并授权 零一的世界 刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。
 您阅读本篇文章共花了: 

 可能感兴趣的文章

评论区

发表评论 / 取消回复

必填

选填

选填

◎欢迎讨论,请在这里发表您的看法及观点。