7

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

澄清:我知道这里的方法只涉及读取每个文件的开头。我正在寻找一个很好的资源(又名链接),它可以为我做到这一点而不必大惊小怪。谢谢。

另外,请仅在 Windows 上使用 C#/.NET。我没有使用 Linux,也无法使用 Cygwin(在 Windows CE 上不起作用,还有其他原因)。

4

7 回答 7

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

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

请在下载之前验证来源。

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

快乐的工具。

于 2008-11-25T21:31:13.690 回答
6

这不是一个完整的答案,但可以从“幻数”库开始。这会检查文件的前几个字节以确定“幻数”,并将其与已知的它们的列表进行比较。这(至少部分)是fileLinux 系统上的命令如何工作的。

于 2008-11-25T21:14:59.277 回答
4

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

https://stackoverflow.com/questions/58510

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

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

于 2008-11-25T21:28:56.130 回答
3

我知道的最简单的方法是使用文件命令,它也可以在带有Cygwin的 Windows 中使用。

于 2008-11-25T21:14:59.310 回答
1

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

于 2008-11-25T21:15:00.917 回答
1

最简单的方法是通过访问具有“文件”命令的 *nix(或 cygwin)系统:

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

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

于 2008-11-25T21:15:53.380 回答
1

您需要使用一些 p/invoke 互操作代码从 Win32 API调用SHGetFileInfo方法。这篇文章也可能有所帮助。

于 2008-11-25T23:11:23.833 回答