我有一个二进制列的表,它存储了许多不同的可能的文件types(PDF,BMP,JPEG,WAV,MP3,DOC,MPEG,AVI等)的文件,但没有列存储名称或types原始文件。 有没有简单的方法来处理这些行,并确定存储在二进制列中的每个文件的types? 最好是只读取文件头的实用程序,这样我就不必完全提取每个文件来确定它的types。
澄清 :我知道这里的方法涉及到只读每个文件的开始。 我正在寻找一个很好的资源(又名链接),可以做到这一点,我没有太多的大惊小怪。 谢谢。
另外,请在Windows上使用C#/ .NET 。 我不使用Linux,不能使用Cygwin(除了其他原因,不能在Windows CE上工作)。
您可以使用这些工具来查找文件格式。
文件分析器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
注:我已经包含下载链接,以确保您获得正确的工具名称和信息。
请在下载之前验证来源。
我曾经使用过一个工具,我认为它是文件分析器,它会告诉你最接近的匹配。
快乐的工具。
这不是一个完整的答案,但一个开始的地方将是一个“神奇数字”库。 这将检查文件的前几个字节以确定一个“幻数”,并将其与已知的列表进行比较。 这是(至少部分)Linux系统上的file
命令的工作原理。
其他人问了一个类似的问题,并发布了用于完成此操作的代码。 你应该能够在这里发布什么,并稍微修改它,以便从数据库中提取。
https://stackoverflow.com/questions/58510
除此之外,它看起来像有人已经写了一个基于魔术数字库来做到这一点,但是,它看起来像该网站需要注册,以及某种形式的替代访问,以便下载这个lirbary。 该文件是免费的,没有注册,这可能是有帮助的。
http://software.topcoder.com/catalog/c_component.jsp?comp=13249160&ver=2
我知道的最简单的方法是使用文件命令,它也可以在Cygwin的 Windows中使用。
许多文件类型都有定义好的头文件来开始文件。 你可以检查前几个字节来检查文件是如何开始的。
最简单的方法是通过访问具有'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个字节传递给文件命令(使用 – 作为文件名)
您需要使用一些p / invoke interop代码从Win32 API调用SHGetFileInfo方法。 这篇文章可能也有帮助。