类别:程序开发
日期:2020-05-26 浏览:2589 评论:0
StreamReader及StreamWriter类中包含一个私有的Stream,
如果你使用public StreamReader(string path)和public StreamWriter(string path);这个构造函数,StreamReader和StreamWriter会主动创建一个FileStream。
如果你使用public StreamReader(Stream stream)或public StreamWriter(Stream stream);这个构造函数,StreamReader或StreamWriter则不会再创建FileStream而是直接使用你传入的Stream 。
在上述两种情况下,** 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将产生异常。
发表评论 / 取消回复