如何获取未知文件的文件类型,如.txt后缀被去掉了

来源:百度知道 编辑:UC知道 时间:2024/06/07 17:18:58
一般来说文件类型为其后缀名,但是后缀名可以更改,要求是通过读取文件头内容,得到文件类型。能够区分出哪些是文本类的就可以了。
请给出VC++的源码,谢谢。
我的意思是区分它是文本文件还是其他文件就可以了,不是要知道它具体是.txt还是.doc之类。
我对具体文件也不了解,只是希望寻求到一种方法,能够在我要操作文件的时候,识别文件类型(过滤出文本类型来压缩),以确定我是否执行此操作
/*------------------------------------------------------------
请给出一个具体的方法,就是在VC里操作的代码。谢谢了!

这显然要先了解一下什么是文本类的文件,其实说白了,就是ACSII码文件。二进制文件与文本文件的显著差别在于:二进制文件中可能会出现数目众多的0,而文本文件中则不会有,因为文本文件中除了一些特殊的控制字符(比如\n,\r,\t)以外,都是可见字符。

补充1:
除了.txt文件以外,其它的各种文件似乎都会有二进制文件头,这些文件头都很特别,比如0xFEFE、0xFDFD等等。必须说明的一点是.doc文件严格的说,它不应该是一个文本文件,因为它内部有大量的不可见的控制字符,而且最关键的是,它内部允许包含0,并且它有二进制的头数据块。
如果你真想鉴别所有的,你所期望的文本类文件的话,比如.txt、.doc这些文件,你就必须了解这些文件的文件格式,当然.txt是没有固定格式的,但它有一个特征是,不会含有0。
补充2:
对于unicode的文本文件来说,它也是有文件头的,根据大小尾的不同,分别是FFFE和FEFF,严格的说,unicode的文件,不能说是文本文件。
回到你的补充问题,如果想确认一个文件是不是文本文件,加入说是ANSI的,你可以遍历整个文件,看是否存在0,如果没有那么就是了,如果具有FFFE或者FEFF文件头的unicode文件,那么你所关注的对象是,00,也就是两个连续的0。

windows下我还没有用过这种命令!
一般都是通过后缀来识别文件类型的。

如果在Linux下的话,用file filename即可查看类型

如:
[root@cn tmp]# file mapping-root
mapping-root: socket

[root@cn tmp]# file 111.ccc
111.ccc: ASCII text

bmp,jpg等图象文件,可以判断文件头,来确定它的文件类型

但txt没有文件头的,无法判断它是否是txt文件

所以,只能分析文件中所有数据,看看是不是都是可以显示的字符

如果都是可以显示的字符,说明它可以当作txt文件进行阅读,否则,会