2014-10-09 14 views
11

La mia domanda è simile a questa domanda: Does File() In asp.net mvc close the stream?FileStreamResult chiude Stream?

ho la segue in C# MVC 4.

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

Sarà fs essere chiusi automaticamente dal FileStreamResult? Grazie!

+4

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

risposta

17

Sì. Utilizza un blocco using attorno allo stream e garantisce che la risorsa venga smaltita.

Ecco l'implementazione interna del metodo 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

grazie! solo curioso, dove l'hai trovato? Andrei collegato al codice per MVC 3; la tua sembra un'altra versione. – totoro

+0

Questa è l'ultima versione MVC5. Ho ottenuto il codice con un decompilatore, ma puoi trovare il codice effettivo su codeplex e include anche i commenti;) –

+0

In MVC6 (vNext) stream [anche chiuso] (https://github.com/aspnet/Mvc /blob/25eb50120eceb62fd24ab5404210428fcdf0c400/src/Microsoft.AspNetCore.Mvc.Core/FileStreamResult.cs) – Dmitry

Problemi correlati