FileStreamResult 会关闭 Stream 吗?

Does FileStreamResult close Stream?

提问人:totoro 提问时间:10/9/2014 最后编辑:Communitytotoro 更新时间:1/27/2021 访问量:18540

问:

我的问题类似于这个问题:File() In asp.net mvc 会关闭流吗?

我在 C# MVC 4 中有以下内容。

FileStream fs = new FileStream(pathToFileOnDisk, FileMode.Open);
FileStreamResult fsResult = new FileStreamResult(fs, "Text");
return fsResult;

会被自动关闭吗?谢谢!fsFileStreamResult

C# asp.net ASP.NET-MVC

评论


答:

74赞 Faris Zacina 10/9/2014 #1

是的。它在流周围使用一个块,这确保了资源将被释放。using

下面是 WriteFile 方法的内部实现FileStreamResult

protected override void WriteFile(HttpResponseBase response)
{
    // grab chunks of data and write to the output stream
    Stream outputStream = response.OutputStream;
    using (FileStream)
    {
        byte[] buffer = new byte[BufferSize];

        while (true)
        {
            int bytesRead = FileStream.Read(buffer, 0, BufferSize);
            if (bytesRead == 0)
            {
                // no more data
                break;
            }

            outputStream.Write(buffer, 0, bytesRead);
        }
    }
}

评论

0赞 totoro 10/10/2014
谢谢!只是好奇,你在哪里找到的?Andrei 链接到 MVC 3 的代码;你的看起来像另一个版本。
0赞 Faris Zacina 10/10/2014
这是 MVC5 最新版本。我得到了带有反编译器的代码,但您可以在 codeplex 上找到实际代码,它也包含注释;)
4赞 Dmitry 3/17/2016
在 MVC6 (vNext) 中,流也被关闭
0赞 Oskar 7/14/2017
现在搬到了这里
0赞 0xced 5/17/2023
现在移动到存储库:FileStreamResultExecutor.csdotnet/aspnetcore