2014-10-09 59 views
11

我的问题是类似这样的问题: Does File() In asp.net mvc close the stream?FileStreamResult关闭流吗?

我已在遵循C#MVC 4

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

fs自动被关闭FileStreamResult?谢谢!

+4

[是](https://github.com/ASP-NET-MVC/ASP.NET-Mvc-3/blob/master /mvc3/src/SystemWebMvc/Mvc/FileStreamResult.cs)。 – 2014-10-09 10:14:10

回答

17

是的。它在流的周围使用了一个using块,并确保资源处置。

这里是内部实现FileStreamResult WriteFile的方法:

protected override void WriteFile(HttpResponseBase response) 
{ 
    Stream outputStream = response.OutputStream; 
    using (this.FileStream) 
    { 
     byte[] buffer = new byte[0x1000]; 
     while (true) 
     { 
      int count = this.FileStream.Read(buffer, 0, 0x1000); 
      if (count == 0) 
      { 
       return; 
      } 
      outputStream.Write(buffer, 0, count); 
     } 
    } 
} 
+0

谢谢!只是好奇,你在哪里找到它? Andrei链接到MVC 3的代码;你的看起来像另一个版本。 – totoro 2014-10-10 01:20:19

+0

这是MVC5最新版本。我使用反编译器获得了代码,但是您可以在codeplex上找到实际的代码,并且它也包含注释;) – 2014-10-10 07:03:59

+0

在MVC6(vNext)流[也正在关闭中](https://github.com/aspnet/Mvc /blob/25eb50120eceb62fd24ab5404210428fcdf0c400/src/Microsoft.AspNetCore.Mvc.Core/FileStreamResult.cs) – Dmitry 2016-03-17 08:57:24