微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 如何从方法返回一个Stream,知道它应该被处理?

我有一个方法,以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);

原文地址:https://www.jb51.cc/csharp/92821.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐