Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用FileStreamResult,MemoryStream是如何关闭的?_.net_Asp.net Mvc 3_Memorystream_Filestreamresult - Fatal编程技术网

.net 使用FileStreamResult,MemoryStream是如何关闭的?

.net 使用FileStreamResult,MemoryStream是如何关闭的?,.net,asp.net-mvc-3,memorystream,filestreamresult,.net,Asp.net Mvc 3,Memorystream,Filestreamresult,下面的代码可以工作,但我想知道创建的MemoryStream是否正确关闭。这应该如何执行,或者FileStreamResult是否为我处理 public FileStreamResult DownloadBudgetedRoleOpportunities( Guid projectGuid, IEnumerable<Guid> guidRequiredRoles) { var rolebroker = new ProjectRoleBudgetBroker(

下面的代码可以工作,但我想知道创建的
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;
}
public FileStreamResult下载预算角色机会(
Guid项目Guid,
IEnumerable guidRequiredRoles)
{
var rolebroker=newprojectrolebudgetbroker();
var memstream=rolebroker.CreateBudgetedRoleOpportunies(
projectGuid,
guidRequiredRoles);
var fsr=new FileStreamResult(memstream,“应用程序/csv”)
{
FileDownloadName=“RoleOpportunities.csv”
};
//memstream.Close();引发异常
返回fsr;
}

文件流结果将为您执行此操作。如果有疑问,请始终检查代码,因为代码从不说谎,而且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);
        }
    }
}
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;
    }
  }
}