如何判断文件是一个正常的excel文件
如何判断文件是一个正常的word文件
如何判断文件是一个正常的access文件

解决方案 »

  1.   

    只要判断后缀名就知道了
    .DOC
    .XLS
    .MDB
      

  2.   

    那你要二进制读取文件头,判断文件头内容了。或者调用office组件,判断能不能正常打开,不能就不是正常的
      

  3.   

    有扩展名,也不一定是那个文件类型。
    到这个地址去下载一个文件类型识别器(没有扩展名也能识别):  http://www.7xdown.com/downinfo/2813.html
      

  4.   


    注意,楼主用了限定词“正常的”。正常的格式文件,首先要扩展名正确。
    其次,可以用二进制方式读入文件头,判断文件格式与扩展名是否相符。接下来,比较麻烦。你要用Word, Excel 和 Access 的“打开”例程检查文件的有效性,其中尤以 Access 复杂,涉及到所有表、查询等是否合法。这样研究三种文件的格式和协议。
      

  5.   

    意义不大吧.. 
    如果必要可以去读取二进制头文件,比如MZ...MSDOS会告诉你的struct _IMAGE_NT_HEADERS {
    DWORD Signature;
    IMAGE_FILE_HEADER FileHeader;
    IMAGE_OPTIONAL_HEADER OptionalHeader;
    }这应该是你要的
      

  6.   

    这里只能给你个方法:
    我们以WORD为例吧。
    先打开WORD,多新建几个文本,然后输入不同内容后,保存(最好保存一个空文挡作比较)。
    打开WINHEX或ULTRA等16进制编辑器,对比各文挡文件。
    (我没装MSOFFICE,这里只能用WPS举例了)
    一般文件的开头是标识,文件最后也可能有:
    (我只对比了两个文件)
    发现前面一样
    00000000h: D0 CF 11 E0 A1 B1 1A E1 00 00 00 00 00 00 00 00 ; ÐÏ.ࡱ.á........
    00000010h: 00 00 00 00 00 00 00 00 3E 00 03 00 FE FF 09 00 ; ........>...þÿ..
    00000020h: 06 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 ; ................
    00000030h: 01 00 00 00 00 00 00 00 00 10 00 00 02 00 00 00 ; ................
    00000040h: 01 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 ; ....þÿÿÿ........
    00000050h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    00000060h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    00000070h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    00000080h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    00000090h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    000000a0h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    000000b0h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    000000c0h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    000000d0h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    000000e0h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    000000f0h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    00000100h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    00000110h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    00000120h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    00000130h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    00000140h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    00000150h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    00000160h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    00000170h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    00000180h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    00000190h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    000001a0h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    000001b0h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    000001c0h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    000001d0h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    000001e0h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    000001f0h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    00000200h: FD FF FF FF                                     ; ýÿÿÿ
    为了加快处理速度,我们取:
    00000000h: D0 CF 11 E0 A1 B1 1A E1 00 00 00 00 00 00 00 00 ; ÐÏ.ࡱ.á........
    00000010h: 00 00 00 00 00 00 00 00 3E 00 03 00 FE FF 09 00 ; ........>...þÿ..
    00000020h: 06 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 ; ................
    00000030h: 01 00 00 00 00 00 00 00 00 10 00 00 02 00 00 00 ; ................
    也就是说,在VB中
    open filename for binary as #1
    判断right(filename.4)=".doc"
    用一个常量储存标识数据:
    const doc = "D0 CF 11 E0 A1 B1 1A E1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3E 00 03 00 FE FF 09 00 06 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 10 00 00 02 00 00 00"
    判断的时候用:
    dim tdoc() as string
    tdoc = split(doc, " ")
    判断的时候进行for循环,一个字节一个自己获取,并用Hex(x)转为16进制与tdoc(i)进行对比,若比配则:
    msgbox "文件正常!"