CFileStream类继承自FileStream  : public class CFileStream : System.IO.FileStream 
   { 
        public CFileStream( 
              string path, 
              FileMode mode, 
              FileAccess access, 
              FileShare share) 
            : base(path, mode, access, share){} 
   ....
   }
  使用CFileStream :  public class CMap:IDisposable 
  {
        public void Dispose()
        {
          Dispose(true);
            GC.SuppressFinalize(this);
        }        protected virtual void Dispose(bool disposing)
        {
            if (!m_disposed)
            {
                if (disposing)
                {
                    // Release managed resources
                }
  
                // Release unmanaged resources
                fs.Close();
                m_disposed = true;
            }
        }
        ~CMap()
        {
            Dispose(false);
        }
  
        private bool m_disposed;        public CMap(string FileName)
        {
           .... 
           fs = new CFileStream( FileName,FileMode.OpenOrCreate,
                             FileAccess.ReadWrite,FileShare.None);
           ....
        }    
  ...
  }
  起初,不管我在任何地方调用关闭流的Close方法(或是Dispose方法),当我第二次
  运行程序时(当然是先关闭先前程序),程序就异常,说是文件被另一进程占用。于是我
  从网上找到一个较为标准的资源释放方法:实现Dispose,不料问题依旧!!  我快崩溃了!这种问题在VC下是决不会出现的,C#智能到哪去了?别说替我回收,我让它
  回收都没给我收回来啊:(  

解决方案 »

  1.   

    我也遇到过,这个貌似是说你Close和Dispose后,Framework会去释放,但是不是立即我觉得可以把FileShare改成共享,这样能解决问题曾经做一个程序的时候,写Log文件,由于其他操作很快,Log写得频繁,就遇到了
      

  2.   

    实现资源释放,尽量使用using
    只要是从IDisposable集成来的类,都可以使用using来自动管理using程序块内的资源。
      

  3.   

    using 吧。这样会比较好些
      

  4.   


    using(fs = new CFileStream( FileName,FileMode.OpenOrCreate, 
                                FileAccess.ReadWrite,FileShare.None)) 
    {
    }
      

  5.   

    用using
    那样代码块结束就自动释放了,你也不必考虑哪里关闭
      

  6.   

    用using(资源){};让资源自动释放
      

  7.   

    不能用using啊,我对一个FileStream对象的使用是在几个函数中,怎么让我用大括号把它们括起来?
      

  8.   

    我再强调一遍:
    不能用using啊,我对一个FileStream对象的使用是在几个函数中,怎么让我用大括号把它们括起来?就是在一个函数中建立fs,但是对fs的使用是在几个函数中,怎么用using ?
      

  9.   

    1、用using肯定是可以的
    2、如果按照LZ的想法,我觉得可以先用Close方法关闭,然后用Dispose()方法销毁
    try
    {
       ........
    }
    catch(IOException ex)
    {
       ........
    }
    finally
    {
       fs.Close();
       fs.Dispose();
    }
      

  10.   

    非托管资源应该在定义的块执行完时就释放掉.
    不然你就应该实现一个Singleton类去管理它保证在整个函数只打开一次。
      

  11.   

    楼主还是检查代码吧..
    我测试了一下没有你说的情况啊. while (true)
                {
                    FileStream fs = new FileStream(@"c:\1.txt", FileMode.OpenOrCreate,
                                   FileAccess.ReadWrite, FileShare.None);
                    fs.Close();
                }
    一直运行也没有发现你说的问题.
      

  12.   

    楼主是继承的?不好意思,.没注意
    反正FileStream本身 是没发现 
      

  13.   


    fs.Flush();
    fs.close();
    fs.dispose();
      

  14.   

    CFileStream  类你是怎么继承的,弄出全部代码让俺学习下好不,
    俺都不知道你继承类里面处理没处理 资源释放. 如果处理了,是不是处理的不对了..如果对的话.毛主席说了,不会出现那情况的.
      

  15.   

    多谢大家的回贴关注啊,巨汗啊。。原来是我的代码中存在逻辑错误,居然重复去打开一个文件,不异常才怪!具体代码就不贴了,贴出来只能是丢脸:( 总之:C#是对的,.net是对的,大家说的是对的,偶错了..