c# – 如何从方法返回一个Stream,知道它应该被处理?
发布时间:2020-12-15 04:05:08 所属栏目:百科 来源:网络整理
导读:我有一个方法,以FileStream为输入.此方法在for循环中运行. private void UploadFile(FileStream fileStream){ var stream = GetFileStream(); // do things with stream} 我有另一种创建和返回FileStream的方法: private FileStream GetFileStream(){ using
我有一个方法,以FileStream为输入.此方法在for循环中运行.
private void UploadFile(FileStream fileStream) { var stream = GetFileStream(); // do things with stream } 我有另一种创建和返回FileStream的方法: private FileStream GetFileStream() { using(FileStream fileStream = File.Open(myFile,FileMode.Open)) { //Do something return fileStream; } } 现在,当我尝试访问返回的FileStream时,第一个方法抛出一个ObjectDisposedException,可能是因为我已经关闭了,因为我正在使用“using”来正确处理流. 如果我不使用“使用”,而是如下使用它,那么FileStream保持打开,循环的下一次迭代(在同一个文件上操作)会引发异常,告诉该文件已经在使用中: private FileStream GetFileStream() { FileStream fileStream = File.Open(myFile,FileMode.Open); //Do something return fileStream; } 如果我使用try-finally块,那么我最后关闭流,那么它也会抛出ObjectDisposedException. 如何有效地返回文件流并关闭它? 解决方法
当您从方法返回IDisposable时,您将将其处理的责任归于您的主叫方.因此,您需要在流的整个使用情况下声明您的使用块,在您的情况下,您可能会跨越上传文件调用.
using (var s = GetFileStream()) UploadFile(s); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |