登录
首页 电脑编程
回帖 发帖
正文

主题:VB 二进制文件的操作

点击:1278 回复:0

所有文件的存储其实质都是二进制的,二进制文件往往由两部分组成,一部分是文件头另一部分存放了文件的内容。文件头通常存放与文件格式有关的信息,以bmp等图象文件为例,它们的文件头中存放了是何种图形格式、图象大小、调色板等信息,要显示图象时先读取文件头以获得文件的详细信息,然后再按其格式把图象内容显示出来。用二进制方式可以操作任何的文件,当然至关重要的一点是要清楚了解所操作文件的文件头结构。

vb中二进制文件操作主要应用的方法和函数有:open,close,get,put等。
open:在for后面的打开模式要用binary。
close:关闭文件。
get:在指定位置取得文件的内容,如果省略位置则从当前位置读取。
put:在指定位置写入文件,如果省略位置参数就从当前位置写。

下面结合代码讲解二进制文件的操作。
下述
[URL=http://www.programbbs.com/doc/]
程序
[/URL]
完成了将两个文件结合成一个文件以及将这个结合后的文件再拆分成原来的两个文件。文件头的结构是自己定义的,非常简单,共8个字节(也就是两个长整型的长度),前4个字节存放第一个文件的长度,后4个字节存放第二个文件的长度。为了更直观地表达文件的结构,现假设有两个文件,第一个文件长度是100字节,第二个文件是200字节,那么合并后得到的文件应该是308字节。按顺序来看,文件的结构是:
4第一文件的长度
4第二文件的长度
100第一文件的二进制内容
200第二文件的二进制内容
除了文件头的8字节长度是固定的后面的长度都会因文件的不同而变化的。

‘实现文件的合并
private sub mergefile()
dim strfilename1 as string 第一个文件
dim strfilename2 as string 第二个文件
dim stroutput as string 合并后的文件
dim arycontent() as byte 用来读取文件的数组,每次读取前要重定义

strfilename1 = c:\a.bmp
strfilename2 = c:\b.bmp
stroutput = c:\out.bmp

注意下面三个open语句都是用binary模式打开的
open stroutput for binary as #100

open strfilename1 for binary as #1
open strfilename2 for binary as #2

put #100, , lof(1) 取得第一文件的长度,并把它写入到合并文件的文件头中
put #100, , lof(2) 取得第二文件的长度,并写入到合并文件的文件头中

redim arycontent(lof(1) - 1) 重定义数组,为读取文件做准备
get #1, , arycontent() 取得第一文件的内容到数组

put #100, , arycontent() 把第一文件的内容写到合并文件中

redim arycontent(lof(2) - 1)
get #2, , arycontent()

put #100, , arycontent()

关闭文件
close #1
close #2
close #100
end sub
‘实现文件的拆分
private sub splitfile()
dim strfilename1 as string
dim strfilename2 as string
dim strfilesplit as string
dim arycontent() as byte
dim lnglof(1) as long 存放从文件头取得的两个文件的长度

strfilename1 = c:\a2.bmp
strfilename2 = c:\b2.bmp
strfilesplit = c:\out.bmp

open strfilesplit for binary as #100

get #100, , lnglof(0) 取得第一文件的长度
get #100, , lnglof(1) 第二文件的长度

open strfilename1 for binary as #1
open strfilename2 for binary as #2

redim arycontent(lnglof(0)-1) 用第一文件的长度重定义数组,为读取第一文件做准备
get #100, 9, arycontent() 从第9字节,即文件后面开始读取第一文件的内容
put #1, , arycontent() 把取得的内容写入到拆分文件中

redim arycontent(lnglof(1)-1)
get #100, 9 + lnglof(0) + 1, arycontent() 从第9字节再加上第一文件的长度处开始读取第二文件的内容,这里可以清楚地看到文件头的作用了
put #2, , arycontent

close #1
close #2
close #100

msgbox 拆分完成。, vbinformation

文本文件由于没有格式所以它的读写都比较简单和直观,而用二进制操作文件时其实质就是对文件头的理解,如果不知道文件头的结构那就无法对文件进行处理了,知道了文件头所包含的信息后,对文件的操作其实就是按规则进行get、put罢了。
----------------------------------------------
此篇文章从博客转发
原文地址: Http://blog.gkong.com/more.asp?id=94309&Name=jczwfy
09-07-19 19:36

工控新闻

更多新闻资讯