有没有一种简单的方法可以在不知道文件扩展名的情况下确定文件的类型?

问题描述 投票:0回答:7

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

澄清:我知道这里的方法涉及仅读取每个文件的开头。 我正在寻找一个好的资源(又名链接),可以为我做到这一点,而不需要太多麻烦。 谢谢。

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

c# .net windows file-extension file-type
7个回答
8
投票

以下是一些查找文件格式的工具:

  1. 网站

    Online TrID File Identifier
    http://mark0.net/onlinetrid.aspx

  2. 软件

    File Analyzer
    ,作者:Vadim Tarasov

该网站的优点是不需要任何安装,因此不太可能提供任何恶意软件。但是,您必须上传文件,这可能不是您想要的隐私保护。


6
投票

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

file
命令的工作方式。


4
投票

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

https://stackoverflow.com/questions/58510

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

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


3
投票

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


1
投票

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


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 个字节通过管道传输到文件命令(使用 - 作为文件名)


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.