如何从内存流中打开文件

5

是否可以直接从MemoryStream打开文件,而不是先写入磁盘再使用Process.Start()?特别是pdf文件?如果不行,我想我需要将MemoryStream写入磁盘(这有点麻烦)。那么,有人能指点一下如何将MemoryStream写入磁盘的资源吗?


(詹姆斯 - 我已從我的答案中刪除了4.0的依賴) - Marc Gravell
3个回答

7

这取决于客户端 :) 如果客户端接受来自stdin的输入,您可以将数据“push”到客户端。另一个可能性是编写一个命名管道服务器或套接字服务器-不太容易,但它可能有效。

然而,最简单的选择就是只需获取一个临时文件并向其写入(然后删除)。

var file = Path.GetTempFileName();
using(var fileStream = File.OpenWrite(file))
{
    var buffer = memStream.GetBuffer();
    fileStream.Write(buffer, 0, (int)memStream.Length);
}

完成后记得清理文件。


或者使用 WriteTo(对于非 4.0 版本) - Magnus
@Magnus - 我移除了那个;意识到我可以使用MemoryStream的后备缓冲区。 - Marc Gravell

1
Path.GetTempFileName() 返回带有“.tmp”扩展名的文件名,因此您无法使用需要通过扩展名进行Windows文件关联的Process.Start()。

0
如果打开文件的意思是像启动 Adobe Reader 一样打开 PDF 文件,那么是的,你必须将它写入文件中。也就是说,除非应用程序提供了一些 API 来完成这个任务。
将流写入文件的一种方法是:
using (var memoryStream = /* create the memory stream */)
using (var fileStream = File.OpenWrite(fileName))
{
    memoryStream.WriteTo(fileStream);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接