判断文件格式 如何判断文件是一个正常的excel文件如何判断文件是一个正常的word文件如何判断文件是一个正常的access文件 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 只要判断后缀名就知道了.DOC.XLS.MDB 那你要二进制读取文件头,判断文件头内容了。或者调用office组件,判断能不能正常打开,不能就不是正常的 有扩展名,也不一定是那个文件类型。到这个地址去下载一个文件类型识别器(没有扩展名也能识别): http://www.7xdown.com/downinfo/2813.html 注意,楼主用了限定词“正常的”。正常的格式文件,首先要扩展名正确。其次,可以用二进制方式读入文件头,判断文件格式与扩展名是否相符。接下来,比较麻烦。你要用Word, Excel 和 Access 的“打开”例程检查文件的有效性,其中尤以 Access 复杂,涉及到所有表、查询等是否合法。这样研究三种文件的格式和协议。 意义不大吧.. 如果必要可以去读取二进制头文件,比如MZ...MSDOS会告诉你的struct _IMAGE_NT_HEADERS { DWORD Signature; IMAGE_FILE_HEADER FileHeader; IMAGE_OPTIONAL_HEADER OptionalHeader;}这应该是你要的 这里只能给你个方法:我们以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 stringtdoc = split(doc, " ")判断的时候进行for循环,一个字节一个自己获取,并用Hex(x)转为16进制与tdoc(i)进行对比,若比配则:msgbox "文件正常!" 类WORD编辑器 求一个类似。NET里的panel控件能用于VB的控件 vb的书 一个非常简单的问题!! 我想在这里多交几个朋友1 请问怎么读取系统变量得值? 奇怪,这里不是非技术区么? 關於VB裡面給Date型變量賦空值的問題 有没有人可以编一段? vb6.0 Do While Loop读取文件,本行不符合条件,跳出本次循环,进入下一行循环 VB6,DLL工程,内附二个Form,他俩之间如何沟通? 为何下面的Word VBA代码运行后其后的代码就不能运行了?
.DOC
.XLS
.MDB
到这个地址去下载一个文件类型识别器(没有扩展名也能识别): http://www.7xdown.com/downinfo/2813.html
注意,楼主用了限定词“正常的”。正常的格式文件,首先要扩展名正确。
其次,可以用二进制方式读入文件头,判断文件格式与扩展名是否相符。接下来,比较麻烦。你要用Word, Excel 和 Access 的“打开”例程检查文件的有效性,其中尤以 Access 复杂,涉及到所有表、查询等是否合法。这样研究三种文件的格式和协议。
如果必要可以去读取二进制头文件,比如MZ...MSDOS会告诉你的struct _IMAGE_NT_HEADERS {
DWORD Signature;
IMAGE_FILE_HEADER FileHeader;
IMAGE_OPTIONAL_HEADER OptionalHeader;
}这应该是你要的
我们以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 "文件正常!"