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