有没有一种简单的方法来确定文件的类型而不知道文件的扩展名?

时间:2008-11-25 21:11:05

标签: c# .net windows file-extension file-type

我有一个带有二进制列的表,它存储了许多不同可能的文件类型(PDF,BMP,JPEG,WAV,MP3,DOC,MPEG,AVI等)的文件,但是没有存储名称或列的列原始文件的类型。有没有简单的方法来处理这些行并确定存储在二进制列中的每个文件的类型?最好是只读取文件头的实用程序,这样我就不必完全提取每个文件来确定其类型。

澄清:我知道这里的方法只涉及读取每个文件的开头。我正在寻找一个可以为我做这个的好资源(也就是链接)而不用太大惊小怪。感谢。

另外,只需在Windows上使用C#/ .NET,。我没有使用Linux而且不能使用Cygwin(除了其他原因之外,在Windows CE上不起作用)。

7 个答案:

答案 0 :(得分:8)

您可以使用这些工具查找文件格式。

文件分析器 http://www.softpedia.com/get/Programming/Other-Programming-Files/File-Analyzer.shtml

什么格式 http://www.jozy.nl/whatfmt.html

PE文件格式分析器 http://peid.has.it/

本网站可能对您有所帮助。 http://mark0.net/onlinetrid.aspx

注意: 我已经包含了下载链接,以确保您获得正确的工具名称和信息。

请在下载之前验证来源。

我过去曾使用过一种工具,我认为它是文件分析器,会告诉你最接近的匹配。

快乐的工具。

答案 1 :(得分:6)

这不是一个完整的答案,但一个开始的地方将是一个“魔术数字”库。这将检查文件的前几个字节以确定“幻数”,并将其与已知的列表进行比较。这是(至少部分)Linux系统上file命令的工作方式。

答案 2 :(得分:4)

其他人问了一个类似的问题并发布了用于完成此操作的代码。您应该能够获取此处发布的内容,并稍微修改它以便从您的数据库中提取。

https://stackoverflow.com/questions/58510

除此之外,看起来有人编写了一个基于幻数的库来执行此操作,但是,看起来该网站需要注册,并且某种形式的备用访问权限才能下载此lirbary。该文档可以免费提供,无需注册,这可能会有所帮助。

http://software.topcoder.com/catalog/c_component.jsp?comp=13249160&ver=2

答案 3 :(得分:2)

我知道最简单的方法是使用file命令,它在Windows中也可以使用Cygwin

答案 4 :(得分:1)

许多文件类型都有明确定义的标题来开始文件。您可以检查前几个字节以检查文件是如何开始的。

答案 5 :(得分:1)

最简单的方法是访问具有'file'命令的* nix(或cygwin)系统:

$ file visitors.*
visitors.html: HTML document text
visitors.png:  PNG image data, 5360 x 2819, 8-bit colormap, non-interlaced

您可以编写一个C#应用程序,将每个二进制列的前X个字节传送到文件命令(使用 - 作为文件名)

答案 6 :(得分:1)

您需要使用一些p / invoke互操作代码来从Win32 API调用SHGetFileInfo方法。这个article也可以提供帮助。