2012-05-02 14 views
29

Poniższy kod działa, ale zastanawiam się, czy utworzony MemoryStream jest poprawnie zamknięty. W jaki sposób należy to wykonać lub czy obsługuje to dla mnie?W FileStreamResult, jak jest zamknięty MemoryStream?

public FileStreamResult DownloadBudgetedRoleOpportunities(
    Guid projectGuid, 
    IEnumerable<Guid> guidRequiredRoles) 
{ 
    var rolebroker = new ProjectRoleBudgetBroker(); 
    var memstream = rolebroker.CreateBudgetedRoleOpportunies(
     projectGuid, 
     guidRequiredRoles); 

    var fsr = new FileStreamResult (memstream, "application/csv") 
       { 
       FileDownloadName = "RoleOpportunities.csv" 
       }; 
    // memstream.Close(); throws exception 
    return fsr; 
} 

Odpowiedz

37

Zrobię to za Ciebie. W razie wątpliwości zawsze sprawdzaj kod, ponieważ kod nigdy nie kłamie, a ponieważ ASP.NET MVC jest open source, jeszcze łatwiej jest wyświetlić kod.

Szybkie wyszukiwanie w Google dla FileStreamResult.cs pozwala sprawdzić, czy w metodzie WriteFile strumień jest prawidłowo usuwany za pomocą instrukcji using. (Gra słów nie przeznaczonych)

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); 
     } 
    } 
} 
2

mieć dostęp do kodu źródłowego, dzięki czemu można sprawdzić samemu ;-)

protected override void WriteFile(HttpResponseBase response) 
{ 
    Stream outputStream = response.OutputStream; 
    using (this.FileStream) 
    { 
    byte[] buffer = new byte[4096]; 
    while (true) 
    { 
     int count = this.FileStream.Read(buffer, 0, 4096); 
     if (count != 0) 
     outputStream.Write(buffer, 0, count); 
     else 
     break; 
    } 
    } 
} 
Powiązane problemy