今天写了一个 读写文件的类文件 FileInfo.cs
其中有一个 GetData(int index,int PageSize)  
 需要读取 文件 指定 位置 (index)  的指定大小(PageSize)FileStream  的开开关关 我觉得 很浪费资源。  所以我打算写一个 Close方法在关闭这个FileStream  现在我的问题是这样的:
用户初始化 FileInfo  以后   FileStream   也跟着初始化。有没有什么办法 可以让用户初始化  FileInfo    后一定要调用它的Close()方法    不然就给一个错误提示 。

解决方案 »

  1.   

    用户初始化 FileInfo 后一定要调用它的Close()方法?
    new FileInfo 然后就close不做任何操作?这种错误是初级新手的错误,你没必要考虑,这样的多虑叫过度设计。文件的操作,可以有长连接的,未必所有对文件的长连接就是错误的。
      

  2.   


    这个问题···或许你试试不关FileStream 会有什么后果就知道了····
      

  3.   

    这样的问题一般使用实现IDispose接口来实现。    class FileInfo : IDisposable
        {
            private System.IO.FileStream _fileStream;
            private _disposed = false;        ...        ~FileInfo()
            {
                if (!this.Disposed)
                {
                    Dispose();
                }
            }        public void Dispose()
            {
                _fileStream.Close();
                _disposed = true;
            }
        }
      

  4.   

    用户在看到你的类实现了IDispose接口的时候,就知道需要在使用完毕后调用Dispose函数,或者使用using {}语句。
      

  5.   

    用户初始化 FileInfo 以后    会常常调用GetData 这个方法  而
    GetData 方法 需要初始化 FileStream 读取文件内容比如说:用户可能会写一个循环 连续调用20次  GetData  方法这个时候 如果我每次都去重新初始化一个 FileStream  用完以后就 FileStream.Close()的话  就太重复了。
    所以我想将 FileSteam 列为FileInfo的全局变量, 初始化 FileInfo 的时候就初始化了FileStream.当用户循环调用这个方法完毕以后  再调用Close() 关闭这个FileStream.就是很多时候 我们会忘记调用这个Close() 。  所以我想    有没有办法把这个Close()方法弄成  用户初始化  FileInfo 以后  必须要调用 Close()方法。
      

  6.   

    没有办法吧,系统怎么知道需要什么时候要调用Close方法?你看看FileStream类的接口就知道了,它也没有实现让用户必须调用Close方法。这是使用你的代码的用户的责任。你所要做的就是,就是提供机制让用户知道怎么样在需要的时候正确地释放资源,即你实现Close方法。还有就是在用户忘记了调用Close方法这样极端的情况,你的程序在适当的时候也会正确的释放资源。实现IDispose接口,就是实现上面说的功能。用户在适当的时候调用Dispose方法来释放资源。同时在析构函数中调用Dipose方法来避免用户忘记调用Dispose函数导致资源释放不掉。我不清楚你的程序,所以未必没有适合你程序的取巧的办法来解决你的问题。但是通常情况下你能做的就是上面这些。
      

  7.   

    为什么不使用using(FileStream stream = new FileStream(path,FileMode.Open,FileAccess.Read)){.....}