Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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
C# 如何从内存流打开文件_C#_File_File Io_Memorystream - Fatal编程技术网

C# 如何从内存流打开文件

C# 如何从内存流打开文件,c#,file,file-io,memorystream,C#,File,File Io,Memorystream,是否可以直接从内存流打开文件,而不是写入磁盘并执行Process.Start()?特别是pdf文件?如果没有,我想我需要将MemoryStream写入磁盘(这有点烦人)。然后有人能给我指一下如何将内存流写入磁盘的资源吗?这取决于客户端:)如果客户端接受stdin的输入,您可以将dta推送到客户端。另一种可能是编写一个命名管道服务器或套接字服务器——虽然不是很简单,但它可以工作 然而,最简单的选择是抓取一个临时文件并写入(然后删除) 完成后请记住清理文件。如果打开文件意味着启动Adobe Read

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

这取决于客户端:)如果客户端接受stdin的输入,您可以将dta推送到客户端。另一种可能是编写一个命名管道服务器或套接字服务器——虽然不是很简单,但它可以工作

然而,最简单的选择是抓取一个临时文件并写入(然后删除)


完成后请记住清理文件。

如果打开文件意味着启动Adobe Reader for PDF文件,则必须将其写入文件。也就是说,除非应用程序为您提供一些API,否则您可以这样做

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

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

Path.GetTempFileName()返回扩展名为“.tmp”的文件名,因此不能使用需要通过扩展名进行windows文件关联的Process.Start()

或者使用
WriteTo
(对于非4.0版)@Magnus-I删除该选项;意识到我可以使用MemoryStream中的后缓冲区(James-我从答案中删除了4.0依赖项)
using (var memoryStream = /* create the memory stream */)
using (var fileStream = File.OpenWrite(fileName))
{
    memoryStream.WriteTo(fileStream);
}