C# 显示来自字节[]或流的文件

C# 显示来自字节[]或流的文件,c#,winforms,stream,bytearray,C#,Winforms,Stream,Bytearray,我有一个winforms应用程序,它将文件内容存储在数据库中。存储的文件可以是几乎任何类型(word、excel、PDF、文本、图像…),用户可以选择几乎任何类型的文件进行加载 然后,用户可以查询数据库,找到一个文件,然后打开它 从数据库中提取字节数组(作为流或字节数组)没有问题 理想情况下,我能够直接从字节数组或流显示文件;目前,我正在将其保存为临时文件,然后使用以下命令打开该文件: Process.Start(fileName); 如何从字节数组或流文件中显示该文件及其关联的应用程序?也许

我有一个winforms应用程序,它将文件内容存储在数据库中。存储的文件可以是几乎任何类型(word、excel、PDF、文本、图像…),用户可以选择几乎任何类型的文件进行加载

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

从数据库中提取字节数组(作为流或字节数组)没有问题

理想情况下,我能够直接从字节数组或流显示文件;目前,我正在将其保存为临时文件,然后使用以下命令打开该文件:

Process.Start(fileName);

如何从字节数组或流文件中显示该文件及其关联的应用程序?

也许您想研究一下内存映射文件。

在windows中,您唯一的选择就是完全按照您的操作。Outlook、Internet explorer、firefox都可以这样做

您可以尝试打开包含它的目录,但它将与您现在所做的相同。。如果操作系统知道关联的应用程序,则不会有问题。

如果将文件名与字节流一起存储在数据库中,则可以根据扩展名确定文件类型。在这种情况下,有两种选择:

  • 使用注册表确定要使用的应用程序。有关这方面的更多信息,请查看上的对话
  • P/Invoke以确定要使用的应用程序
  • NB:使用这两个选项,您仍然需要将文件数据写入磁盘上的临时文件才能加载它


    就我个人而言,我认为你所做的可能是最简单的选择(除非你想为某些文件类型等提供自定义查看器)

    我同意,这是唯一的选择。在大家看来,这似乎是最普遍的选择,对我来说也是最简单的选择,它已经编码并运行了。唯一的缺点是剩余的临时文件。我无法从我的应用程序中删除它们,因为用户可能会使启动的应用程序比我的应用程序打开的时间更长。当您说您将其保存为临时文件时,您的意思是将该文件保存到标准windows临时目录中吗?我使用GetTempPath()实现这一点。这样,windows将负责清理文件(尽管最终是这样),实际上我正在使用Path.GetTempFileName并将文件类型替换为我拥有的文件类型。是的,它在临时目录中。奇怪的是,Path.GetTempFileName实际上创建了一个文件,因此如果您要更改扩展名,可能需要删除“旧”扩展名