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);