日期:2014-05-16  浏览次数:20921 次

发现把FileStream给多个包装类的对象以后,某些包装对象close的时候会扔异常。
本帖最后由 u014063110 于 2014-03-17 15:28:19 编辑
我尝试把FileStream的一个对象给StreamWriter和BinaryWriter。

        static void Main(string[] args)
        {
            FileStream f = null;
            StreamWriter sw = null;
            BinaryWriter bw = null;
            try
            {
                f = File.Open(@"d:\xyz.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
                sw = new StreamWriter(f);
                bw = new BinaryWriter(f);
            }
            catch (Exception e) 
            {
                Console.WriteLine(e.ToString());
            }
            finally
            {
                if(null != key)key.Close();
                else Console.WriteLine("failed");
                if (null != bw) bw.Close();
                if (null != sw) sw.Close();//这句话出了exception
                if (null != f)  f.Close();
            }
        }

发现在finnaly块当中,第二关Close()函数调用出现了问题,如果我注释掉

                if (null != bw) bw.Close();

或者

                if (null != sw) sw.Close();

都可以避免抛exception。这是为什么呢?
------------exception的信息如下-------------------------------
Unhandled Exception: System.ObjectDisposedException: Cannot access a closed file.
   at System.IO.__Error.FileNotOpen()
   at System.IO.FileStream.Flush(Boolean flushToDisk)
   at System.IO.FileStream.Flush()
   at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder)
   at System.IO.StreamWriter.Dispose(Boolea