通过查看其二进制内容以编程方式找到文件类型。 可能?

我有一个ac#组件,它将收到以下类型的文件.doc,.pdf,.xls,.rtf

这些将由调用siebel传统应用程序作为文件流发送。

所以…

[LegacyApp] >> {二进制文件流} >> [组件]

遗留应用程序是一个黑盒子,无法修改以告诉组件它正在发送什么文件类型(doc,pdf,xls)。 组件需要读取此二进制流并在具有正确扩展名的文件系统上创建文件。

有任何想法吗?

谢谢你的时间。

在基于Linux / Unix的系统上,您可以使用file命令,但我假设您想在代码中自己手动执行此操作…

如果你有权访问的是文件的字节流,那么你需要独立处理每种文件类型。

执行您想知道的大多数程序/组件通常会读取前几个字节并根据它进行分类。 例如,GIF文件以下列之一开头:GIF87a或GIF89a

许多文件格式在文件开头具有相同的签名,或者具有相同的标头格式。 这个签名被称为我在这篇文章中描述的幻数 。

入门的好地方是访问www.wotsit.org 。 它包含可按文件类型搜索的文件格式规范。 您可以查看要处理的重要文件类型,看看是否可以在这些文件格式中找到一些识别因素。

您还可以搜索Google以尝试查找执行此分类的库,或查看文件命令的源代码。

是的,这是可能的,因为MS Office(97-2007或其左右)文件都以D0CF11E开头,然后在字节512处有一个子类型标记。

有关这些内容的参考资料,请访问: http : //www.garykessler.net/library/file_sigs.html

这似乎是最好的列表,有各种各样的文件格式 – 它是维基百科上的主要参考。

它没有提供有关新Office格式的完整详细信息,因此这来自我自己的示例。 DOCX文件以“PK”开头(从技术上讲它们是zip文件),然后包含字符串“word / _rels / document.xml.rels”,而XLSX包含“xl / _rels / workbook.xml.rels”。

您可能对此感兴趣: http : //en.wikipedia.org/wiki/Magic_number_ (programming)

大多数二进制格式在其开头包含幻数。 如果您只需要识别某组格式,则应该很容易检查新传入文件的前几个字节并正确猜出相应的文件扩展名。

在linux上,有一个名为file的命令。 给定一个任意文件,它会尝试确定它是什么类型的文件。 例如:

 gzip compressed data, from Unix, last modified: Fri Jun 12 20:16:28 2009 HTML document text vCalendar calendar file RCS/CVS diff output text 

这些是来自我的主目录周围的几个随机文件。

是的。 见file

请不要重新发明轮子。 它的工作原理很好。