我正在编写一个创建文件"目录"的应用程序,它可以归因于其他元数据文件,例如附件和缩略图.
我正在尝试将接口抽象到目录,以使目录的使用者不需要知道用于存储文件的基础文件系统.所以我创建了一个名为的接口IFileSystemAdaptor,如下所示.
public interface IFileSystemAdaptor:IDisposable
{
void WriteFileData(string fileName, Stream data);
Stream ReadFileData(string filename);
void DeleteFileData(string filename);
void ClearAllData();
void WriteMetaFileData(string filename, string path, Stream data);
Stream ReadMetaFileData(string filename, string path);
void DeleteMetaFileData(string filename, string path);
void ClearMetaFilesData(string filename);
}
Run Code Online (Sandbox Code Playgroud)
本质上,我的IFileSystemAdaptor接口公开了一个平面文件列表,也可以与其他元数据文件相关联.
正如您所看到的,我正在使用对通用Stream对象的引用来将接口抽象为文件的数据.这样,Catalog的一个实现可以从硬盘返回文件,而另一个实现可以从Web服务器返回数据.
现在我想弄清楚如何防止我的程序离开流.成员应关闭流的是否有经验法则?如果流的消费者关闭它,或者原始创建流的成员是否应该负责关闭它.
kem*_*002 14
我的规则:
流的消费者是否应关闭它
如果我从方法返回流,则消费者负责.我是给你的,这是你的责任.
如果我接受一个流作为方法中的参数,我不会关闭它.退出方法时,我不知道调用方法是否仍然需要它.这是你的流,我只是借用它,我不想搞砸你.
如果我创建一个流并将其传递给另一个方法,我的方法关闭它(或尝试),当我完成它.我不知道你要用它做什么,但这是我的流,所以我对此负责.