2009-12-01 52 views
1

我有一个winforms应用程序,它将文件的内容存储在数据库中。存储的文件可以是几乎任何类型(word,excel,PDF,文本,图像...),用户可以选择几乎任何类型的文件加载。从字节[]或流显示文件

用户然后可以查询数据库,找到一个文件,然后打开它。

我没有问题从数据库中提取字节数组,作为流或字节数组。

理想情况下,我可以直接从字节数组或流中显示文件;此刻,我已把它作为一个临时文件,然后打开与:

Process.Start(fileName); 

我如何可以显示无论是从任何字节数组或流文件的相关应用程序的文件?

回答

3

在windows中,你唯一的选择就是做你正在做的事情。 Outlook,Internet Explorer,Firefox,全部都是这样的

+1

我同意,这是唯一的选项。 – Jochen 2009-12-01 08:55:19

+0

好吧,这似乎是共识,也是我最简单的选择,它已经编码并运行。 唯一的缺点是剩余的临时文件。我无法从我的应用程序中删除它们,因为用户可能会将已启动的应用程序的打开时间比我的时间更长。 – baralong 2009-12-02 05:29:43

+0

当你说你将它保存为临时文件时,你的意思是你将文件保存到标准的Windows临时目录中吗?我使用GetTempPath(http://msdn.microsoft.com/en-us/library/system.io.path.gettemppath.aspx)。这样,Windows将负责清理文件(虽然最终) – 2009-12-02 09:16:49

0

也许你想研究一下存储器映射文件。

0

你可以尝试打开包含它的目录,但它现在就是你现在正在做的事情。如果相关的应用程序被OS知道,那么不会有任何问题。

0

如果您在DB中存储文件名以及字节流,您可以从扩展名中确定文件类型。在这种情况下有两种选择:

  1. 使用注册表来确定要使用的应用程序。欲了解更多信息,请看bytes.com
  2. P/Invoke SHGetFileInfo来确定要使用的应用程序。

注:有了你仍然需要将文件写入数据到磁盘上的临时文件,以加载这两个选项。

个人而言,我觉得你在做什么可能是最简单的选择,反正(除非你想对某些文件类型提供定制的观众等)