现在编了一个文件读写的程序,是对目录进行全部读写,但是现在我想在读写时跳过二进制文件,仅想读写文本文件。本来想弄ASCII码来弄,发现明显不行。
难道用CFile的读写方式吗??(我记得ULTRAEDIT在读文件可自动区分,如果是二进制文件就自动调用16进制编辑器,有中文的文本文件也是用文本方式读的)
谢谢!!!

解决方案 »

  1.   

    二进制文件和文本文件的唯一差异就是前者含有一些非标准输出的ASCII码。(0x01就是非标准输出的ASCII码,
    0x61就是标准输出的ASCII码。)
      

  2.   

    但这不是可靠的判别方式:假如二进制恰好都是在“可标准输出”之内,那就不好说了比如,对于数字66,写成文件时如用文本方式,需要2个字节;用二进制方式,只需1个字节。(BYTE类型)。
    但一旦写上了硬盘,前者就是  0x36 0x36 后者:0x42,
    你说后者是二进制还是文本的?
    难道就不能说成一个文本字符“B”吗?
      

  3.   

    如果是unicode要先判断   前两个字节是否是  FF FE.
      

  4.   

    搞这么复杂? 用后缀名判断不好吗,读所有txt文件其他跳过
      

  5.   

    说一下现在用的方法:
    GETFILESIZE获得文件大小--------》
    READFILE读出文件内容--------》
    比较文件内容长度,若小于文件大小则判断为二进制文件,相等为文本文件。
    实验了一下,对平时正常的文件基本正确,不知各位有什么看法,谢谢。。
      

  6.   

    楼上的方法有什么根据?我看只有 读每个字节然后判断 isprint但是没有保险的办法, 正如二楼所说. 如果碰巧一个二进制文件里都是可打印代码,那么怎么说呢? 其实,所有的文件都可以看做二进制的,所以用二进制操作总没有错
      

  7.   

    to qexing(刻周求剑) ,你是把内容放到字符串中,然后用strlen()得出长度吧?
    我知道你为什么得出的结果一般比较短,因为2进制文件中,肯定会有很多0x00的;
    而字符串就是以0x00来结尾的,所以你得到的比纯文本文件短.这种方法也不能说是可靠的方法...
      

  8.   

    to:jun_01(无名小卒) 取文件长度,应该是直接通过文件类操作,获取文件内容字节数,不会取到串中再strlen来判断的,因为这样会出现你说的问题