如何从Memory Stream打开文件

时间:2011-06-04 11:58:35

标签: c# file file-io memorystream

是否可以直接从MemoryStream打开文件而不是写入磁盘并执行Process.Start()?特别是pdf文件?如果没有,我想我需要将MemoryStream写入磁盘(这有点烦人)。有人可以指出我有关如何将MemoryStream写入磁盘的资源吗?

3 个答案:

答案 0 :(得分:7)

这取决于客户端:)如果客户端将接受来自stdin的输入,您可以 dta推送到客户端。另一种可能是编写一个命名管道服务器或一个套接字服务器 - 这不是一件容易的事,但它可能有效。

但是,最简单的选择是只获取一个临时文件并写入该文件(然后删除)。

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

请记住在完成后清理文件。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

如果通过打开文件,您的意思是启动Adobe Reader for PDF文件,那么是的,您必须将其写入文件。也就是说,除非应用程序为您提供了一些API。

将流写入文件的一种方法是:

using (var memoryStream = /* create the memory stream */)
using (var fileStream = File.OpenWrite(fileName))
{
    memoryStream.WriteTo(fileStream);
}