C# 如何找出数据库中以二进制格式存储的文件的扩展名(类型)?

C# 如何找出数据库中以二进制格式存储的文件的扩展名(类型)?,c#,.net,sql-server,vb.net,winforms,C#,.net,Sql Server,Vb.net,Winforms,我已将文件以二进制格式存储在数据库中。。现在我想下载这些文件,我没有在表中的任何列中存储文件的名称、扩展名或类型。。只是二进制流。下载时我能从二进制流中找到扩展名吗?如何识别?某些类型的文件可以通过其第一个字节的内容识别(例如,EXE文件的第一个字节为MZ,PNG文件的第一个字节为%PNG),但这并不是一个标准,编写一个程序,通过查看内容来识别每种可能的文件类型实际上是不可能的。最好的方法是搜索客户使用最多的文件的信息,创建一个新列以包含可能的扩展名,然后编写一个自定义程序来检查此二进制字段的内

我已将文件以二进制格式存储在数据库中。。现在我想下载这些文件,我没有在表中的任何列中存储文件的名称、扩展名或类型。。只是二进制流。下载时我能从二进制流中找到扩展名吗?如何识别?

某些类型的文件可以通过其第一个字节的内容识别(例如,EXE文件的第一个字节为
MZ
,PNG文件的第一个字节为
%PNG
),但这并不是一个标准,编写一个程序,通过查看内容来识别每种可能的文件类型实际上是不可能的。最好的方法是搜索客户使用最多的文件的信息,创建一个新列以包含可能的扩展名,然后编写一个自定义程序来检查此二进制字段的内容,然后编写扩展名列(如果找到匹配项)。当然,修复写入二进制内容以填充扩展列的主程序

如果数据库中没有保存大量文件,则可以创建一个backgroundworker类,该类通过数据库中的文件进行写入,创建一个tmp文件并存储所需的文件信息和相应的ID。您可以将其与Steves answer相结合,您的backgroundworker类可以尝试根据第一个字节确定文件类型,如果需要,创建一个tmp文件

我现在无法创建新列。如果我能识别出至少一些常见的文件类型,比如.pdf、.doc、.txt、.jpg、png、.gif和.zipi,那就好了,但它没有十六进制数,也没有二进制数,这会给你的代码带来明显的延迟,因为你必须阅读这些信息,然后检查它们以找到关于它们真正含义的任何线索。不要认为这篇文章在这里有任何价值。如果您尝试使用记事本打开PDF文件,您会注意到前4个字节是
%PDF
,因此您需要读取这些字节,然后得出相应的扩展名。能否显示存储该数据的代码?如果要再次显示PDF,需要将该过程还原为原始二进制格式