2012-12-19 35 views
2

我有以下几点:的MemoryStream到虚拟文件

using(var memoryStream = new MemoryStream()) 
{ 
    gc.CreatePackage(memoryStream); 
} 

MemoryStream的吐出一个Excel FIL。从memoryStream中,我如何去实际显示所生成的文件。请注意,我不想将文件实际保存到磁盘,而只是显示它。

到目前为止,我有以下的,但似乎并没有工作:如果

using (var memoryStream = new MemoryStream()) 
{ 
    gc.CreatePackage(memoryStream); 

    using (var fileStream = File.OpenWrite("Test.xlsx")) 
    { 
     memoryStream.WriteTo(fileStream); 
    }     
} 

但不知道我是在正确的方向。我得到一个错误说:

System.Web.Mvc.Controller.File(字节[],字符串)”是 '法',这 是不是在给定的情况下

有效我不知道我是否正朝着正确的方向前进。

+1

你将不得不与命名空间'的前缀它System.IO.File' – Silvermind

+0

你怎么想显示它?你提到'MVC',你想写入'Response'吗?做一个'File.OpenWrite'将文件写入磁盘,这听起来不是你想要的。 –

+0

@DaveZych - 我不想把它写在磁盘上,而只是从内存中的内容中显示出来。这个想法是,当我展示给他们时,他们可以将它保存到磁盘,如果需要或仅仅丢弃它。那么为什么我会使用响应? –

回答

1

使您使用ASP.NET MVC的假设,你可能希望File response helper

using (var memoryStream = new MemoryStream()) 
{ 
    gc.CreatePackage(memoryStream); 
    memoryStream.Seek(0, SeekOrigin.Begin); 
    return File(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
} 

如果你想有一个文件源居然出现在浏览器,你也可以撒谎的MIME改为输入并使用text/plain。浏览器很可能会将其作为纯文本呈现。

您还可以将第三个参数添加到File以指定下载应显示给最终用户的文件名。

0

由于您发布的错误似乎表明您尝试从MVC控制器返回生成的文件,我认为这可能是您要查找的内容。

​​
0

您可以使用MemoryMappedFile创建一个虚拟文件。

示例代码:

写:

using (var mmf = MemoryMappedFile.CreateNew("MappedFileName", size, MemoryMappedFileAccess.ReadWriteExecute)) 
    { 
     using (MemoryMappedViewAccessor accessor = mmf.CreateViewAccessor()) 
     { 
      accessor.Write(Write your data to mapped file); 
     } 
    } 

阅读:

using (var mmf = MemoryMappedFile.OpenExisting("MappedFileName")) 
    { 
     using (MemoryMappedViewAccessor accessor = mmf.CreateViewAccessor()) 
     { 
      accessor.Read...... 
     } 
    }