With FileStreamResult, how is the MemoryStream closed?
.net, asp.net-mvc-3, filestreamresult, memorystream
Solution
The `FileStreamResult` will do that for you. When in doubt always check the code, because the code never lies and since ASP.NET MVC is open source it's even more easy to view the code.
A quick search on Google for FileStreamResult.cs lets you verify that in the `WriteFile` method the stream is correctly disposed using the `using` statement. (no pun intended)
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);
}
}
}
Problem
The following code works, but I'm wondering if the `MemoryStream` created is closed properly. How should this be performed or does `FileStreamResult` handle it for me? ``` 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; } ```