该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-12-13
together 写道 投新手的19票,差不多是一个资深会员的。
简单一点的通过后缀名就可以判断。再深入一点,可以以文本方式打开文件,存为string,再写入新文件,如果新旧文件的大小一样,应该就是文本文件了。否则就是二进制文件。 恩,这倒是一个方法,可以不用全读,只读1024字节,然后存成String,写入tmp文件,在判断新旧是否一样大 |
|
返回顶楼 | |
发表时间:2006-12-13
在linux或者unix系统用file命令就可以打印文件的类型,估计是读取文件头部信息,楼主可以去看看file源代码,应该有所收获。
|
|
返回顶楼 | |
发表时间:2006-12-14
together 写道 投新手的19票,差不多是一个资深会员的。
简单一点的通过后缀名就可以判断。再深入一点,可以以文本方式打开文件,存为string,再写入新文件,如果新旧文件的大小一样,应该就是文本文件了。否则就是二进制文件。 你这只能检查出\0字符。 |
|
返回顶楼 | |
发表时间:2006-12-14
lijiangt 写道 在linux或者unix系统用file命令就可以打印文件的类型,估计是读取文件头部信息,楼主可以去看看file源代码,应该有所收获。
嗯,这个回复是最靠边的,不错。 可不可以这么说,用文本编辑器(如记事本)能正常编辑的,就是文本文件。 |
|
返回顶楼 | |
发表时间:2006-12-14
要检查是否可执行文件/动态连接库,检查头是否: 4D 5A
检查是否JPG,头文件是否:FF D8 FF E0 每种格式的头文件都是固定的,搂住说“二进制”是有问题的,我估计搂住想问的是:如何判断是否可执行文件? |
|
返回顶楼 | |
发表时间:2006-12-14
仅仅判断前两位不够,我检查过各种执行文件,头两行都是:
4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 B8 *** 但是如forxmail,EDiary 则是4D 5A 50,这个是有规律的,可仔细探索下。 4D 5A 90是MZ格式,4D 5A 50大家叫他MZP. ----- 这个说法针对win有效,对unix,linux无效 别人的贴看到的另一种判断法(我没证实是否有效): 逐字节读取,然后满足以下任何一个条件那么就是二进制文件: 1、所读取字节大于127并且小于160; 2、所读取字节大于等于160并且不成对出现;(注:大于等于160并成对出现的是汉字,其他UNICODE字符集编码格式不是很清楚) 3、所读取字节小于32并且不等于9(TAB)、10(换行) (注: 10 是UNIX格式文本换行) 4、所读取字节小于32并且等于13(回车)但是之后的字节并不是10(换行) (注:13 10 是DOS格式文本换行) 投新手贴的人确实太不厚道。 |
|
返回顶楼 | |
发表时间:2006-12-14
lijiangt 写道 在linux或者unix系统用file命令就可以打印文件的类型,估计是读取文件头部信息,楼主可以去看看file源代码,应该有所收获。
试了一下file命令,果然能分出绝大多数的文件类型,找源码来看过后再发表意见,我判断是否试文本文件的目的是文本比较,在比较两个文件之前先判断是否是文本文件,如果不是就不比较了,判断后缀名能够满足大部分需求,但是维护已知文件后缀总是觉得不是完全之策,比如再unix下有的文件根本没有后缀也是文本文件,这样岂不是就有了漏网之鱼 |
|
返回顶楼 | |