2014-10-09 8 views
11

Moje pytanie jest podobne do tego pytania: Does File() In asp.net mvc close the stream?Czy FileStreamResult jest w pobliżu strumienia?

I oddaj następuje w C# MVC 4.

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

Will fs zostać automatycznie zamknięte przez FileStreamResult? dzięki!

+4

[Tak] (https://github.com/ASP-NET-MVC/ASP.NET-Mvc-3/blob/master /mvc3/src/SystemWebMvc/Mvc/FileStreamResult.cs). –

Odpowiedz

17

Tak. Używa bloku using wokół strumienia, a to zapewnia, że ​​zasób się wyrzuci.

Oto wewnętrzne wdrożenie metody 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

dzięki! po prostu ciekawy, gdzie go znalazłeś? Andrei powiązany z kodem dla MVC 3; twoja wygląda jak inna wersja. – totoro

+0

To jest najnowsza wersja MVC5. Mam kod z dekompilatorem, ale możesz znaleźć aktualny kod na codeplexie i zawiera on również komentarze;) –

+0

W strumieniu MVC6 (vNext) [również jest zamykany] (https://github.com/aspnet/Mvc /blob/25eb50120eceb62fd24ab5404210428fcdf0c400/src/Microsoft.AspNetCore.Mvc.Core/FileStreamResult.cs) – Dmitry

Powiązane problemy