Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.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#_.net_File - Fatal编程技术网

C# 从字节数组打开文件

C# 从字节数组打开文件,c#,.net,file,C#,.net,File,我正在应用程序中存储附件 它们以varbinary类型存储在SQL中 然后我将它们读入byte[]对象 我现在需要打开这些文件,但不想先将文件写入磁盘,然后使用Process.Start()打开 我想使用内存流中的打开。有没有办法在.net中实现这一点。请注意,这些文件可以是任何类型的MemoryStream具有 因此: 这应该很管用 编辑:Aw,废话,我完全错过了过程。开始部分。我在重写 编辑2: 你不能做你想做的事。您必须从文件执行进程。您必须写入磁盘;或者,这个问题的答案有一个非常复杂的建

我正在应用程序中存储附件

它们以
varbinary
类型存储在SQL中

然后我将它们读入
byte[]
对象

我现在需要打开这些文件,但不想先将文件写入磁盘,然后使用
Process.Start()
打开

我想使用内存流中的打开。有没有办法在.net中实现这一点。请注意,这些文件可以是任何类型的

MemoryStream具有

因此:

这应该很管用

编辑:Aw,废话,我完全错过了
过程。开始
部分。我在重写

编辑2:


你不能做你想做的事。您必须从文件执行进程。您必须写入磁盘;或者,这个问题的答案有一个非常复杂的建议,可能有效,但可能不值得付出努力

您可以在不使用流的情况下将所有字节写入文件:

System.IO.File.WriteAllBytes(path, bytes);
然后就用

Process.Start(path);
试图从内存中打开文件是不值得的。真的,你不想这么做。

内存文件

我唯一的问题是,我必须确保用户对我放置文件的路径有写访问权

您应该能够保证返回的内容是您的用户可以访问的

…而且我也不确定如何检测到用户已关闭该文件,以便我可以从磁盘中删除该文件


如果您使用
process.start(…)
启动进程,您是否应该能够监视进程何时终止?

如果您绝对不想自己写入磁盘,您可以实现本地HTTP服务器并通过HTTP(如)提供附件。 另外,我不确定你做这些琐碎的工作是否能获得足够的好处。您将从本地安全区域打开文件,这比从磁盘打开要好一些。。。而且不需要自己写磁盘。如果您将.exe文件作为附件,您可能会得到一些合理的警告


在跟踪“附件处理完毕”时,您或多或少是运气不佳:只有在某些情况下,开始打开文件的进程才是实际使用该文件的进程。也就是说,Office应用程序通常是单实例应用程序,因此文档将在应用程序的第一个实例中打开,而不是在您启动的那个实例中打开。

是的,这是可能的。我自己也这样做了。你是在问怎么做?如果是这样,请发布您当前拥有的代码并解释您的问题。打开这些文件的具体目的是什么?我的意思是,如果它们是任何类型的(.pdf、.png、.exe、.doc、.bat、.wav、.ms3d等等),那么在将它们的文件加载到内存中并适当地处理数据之后,您打算做什么?@Oded:处理字节流是可能的,但在.NET中执行任意字节流是不可能的。如果你和我一样,错过了
过程。开始
部分,没有伤害,没有犯规,但是如果你看到了,并且仍然声称这是可以做到的,我会继续问:怎么做???@Randolpho-是的,错过了
过程。开始
部分。。。“我的错!”兰多尔夫重新阅读了任务,结果证明你是对的。更新答案。感谢您的快速回复。因此,从我收集的信息来看,要打开从db附加的存储文件,我需要将其写入磁盘,然后他们使用Process.Start()方法打开文件。我唯一的问题是,我必须确保用户对我将放置文件的路径具有写访问权限,也不确定如何检测用户已关闭文件,以便我可以从磁盘中删除文件。以下是我尝试执行的操作的背景:我的winforms应用程序允许用户记录案例和在这种情况下,它们可以保存附件(这些附件存储在SQL DB中)。稍后,他们可以通过双击网格打开附件。所以我的问题是什么是打开附件文件的最佳方式。我不希望通过保存到磁盘然后打开来打开。既然我来了,为什么需要做清理,因为我不希望这些文件留在用户的本地驱动器上
Process.Start(path);