我怎样检测一个文件是二进制文件还是纯文本文件?
我的.NET应用程序正在处理批处理文件并提取数据,但我不想处理二进制文件。
作为解决方案,我考虑先分析文件的前X个字节,如果有更多的不可打印字符比可打印字符,则应该是二进制文件。
这是正确的方法吗?是否有更好的实现方法来执行此任务?
我怎样检测一个文件是二进制文件还是纯文本文件?
我的.NET应用程序正在处理批处理文件并提取数据,但我不想处理二进制文件。
作为解决方案,我考虑先分析文件的前X个字节,如果有更多的不可打印字符比可打印字符,则应该是二进制文件。
这是正确的方法吗?是否有更好的实现方法来执行此任务?
file
不使用操作系统提供的信息来确定文件类型。它只是查看BOM、魔数、内容启发式等,正如其他答案中所述。 - Derrick Turkfile
在其算法中是系统无关的,尽管源文件不是。我认为任何能够阅读C#代码的人都能理解一些C代码(因为它们类似),所以我认为你可以轻松找到与你相关的源代码部分。file
非常可靠,可以最准确地告诉你所需的信息(二进制还是纯文本)。 - Bruno Brant我认为最好的方法是从文件中最多取前X个字节(X可以是256、512等),计算未被ASCII文件使用的字符数(允许使用的ASCII代码为:10、13、32-126)。如果你确定脚本是用英语编写的,那么没有任何字符会超出上述集合。如果你不确定语言,那么你可以允许最多Y个字符超出该集合(如果X是512,我会选择Y为8或10)。
如果这还不够好,你可以使用更多的限制条件,例如:根据文件的语法,应该存在这样的关键词(例如:对于批处理文件,应该有一些echo、for、if、goto、call、exit等)。