【问题标题】:With FileStreamResult, how is the MemoryStream closed?使用 FileStreamResult,MemoryStream 是如何关闭的?
【发布时间】:2012-05-12 05:07:17
【问题描述】:

以下代码有效,但我想知道创建的MemoryStream 是否正确关闭。这应该如何执行或FileStreamResult 会为我处理吗?

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

【问题讨论】:

    标签: .net asp.net-mvc-3 memorystream filestreamresult


    【解决方案1】:

    FileStreamResult 将为您做到这一点。如有疑问,请务必检查代码,因为代码永远不会说谎,而且由于 ASP.NET MVC 是开源的,因此查看代码更加容易。

    在 Google 上快速搜索 FileStreamResult.cs 可让您验证在 WriteFile 方法中使用 using 语句正确处理流。 (没有双关语)

    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】:

      你可以访问源代码,所以你可以检查自己;-)

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

      【讨论】:

        猜你喜欢
        • 2014-12-04
        • 1970-01-01
        • 2015-11-09
        • 1970-01-01
        • 2021-11-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多