1、(一)打开和关闭文件1、顺序文件打开顺序文件,我们可以使用 Open 语句。它的格式如下:Open pathname For Input |Output |Append As #filenumber Len = buffersize 说明:(1)参数 pathname 表示要打开的文件名,文件名可以包含有驱动器和目录(2)Input Output 和 Append 用于设置顺序文件的打开方式。其中,Input 表示从打开的文件中读取数据。以这种方式打开文件时,文件必须存在,否则会产生错误。Output表示向打开的文件中写入数据。以这种方式打开文件时,文件中原有的数据将被覆盖,新的数据将从文件开
2、始写入。如果文件不存在,则创建一个新文件。Append 表示向打开的文件中添加数据。以这种方式打开时,文件中原有的数据将被保留,新的数据将从文件为开始添加。如果文件不存在,则创建一个新文件。(3)As#filenumber 子句用于为打开的文件指定文件号 .对文件进行读写操作时,要用文件号表示该文件.文件号是介于 1511 之间的整数,既可以是数字,又可以是变量.也可以省略不用.(4)当在文件与程序之间拷贝数据时,Len=buffersize 子句指定缓冲区的字符数.例如:Open App.Path + “test.dat“ For Output As 1Open App.Path + “te
3、st.dat“ For Output As 1 这两句代码在当前应用程序所在目录下创建了一个名为 test.dat 的文本文件, 分配文件号为 1.Open App.Path + “test.dat“ For Input As #filenumber 这条语句是从文本文件中读取数据.Open App.Path + “test.dat“ For Append As #filenumber 这条语句则是像文本文件中添加数据2、随机文件操作随机文件之前,首先必须定义用于保存数据项的记录类型. 该记录是用户自定义数据类型,他们是随机文件中存储数据的基本结构 .例如:Type StudentNo As
4、IntegerName As String * 20age As IntegerEnd TypeDim Stud As Student 定义一个可以存放学生材料的变量 随机文件中,所有的数据都将保存到若干个结构为 Student 类型的记录中, 而从随机文件中读出的数据则可以存放到变量 Stud 中.之后我们就可以打开并读写文件了.下面是打开随机文件的语法格式 :Open filename For Random as #filenumber Len = Reclength 说明:(1)参数 filename 和 filenumber 分别表示文件名或文件号.(2)关键字 Random 表示打开
5、的是随机文件(3)Len 子句用于设置记录长度,长度由参数 Reclength 指定.Reclength 的值必须大于 0,而且必须与定义的记录结构的长度一致.计算记录长度的方法是将记录结构中每个元素的长度相加.例如前面声明的 Student 的长度应该是 2+20+2=24 字节.打开一个记录类型为 Student 的随机文件的方法是:Open “c:Student.txt “ For Random As #1 Len = 25 3、二进制文件打开二进制文件的语法格式如下:Open pathname For Binary As #filenumber 说明:(1) 参数 filename 和
6、 filenumber 分别表示文件名或文件号.(2)关键字 Binary 表示打开的是二进制文件(3)对于二进制文件,不能指定字节长度 .每个打开的二进制文件都有一个自己的指针,文件指针是一个数字值,指向下一次读写操作的文件中的位置 .二进制文件中的每个” 位置”对应一个数据字节,因此,有 n 个字节的文件 ,就有 1 到 n 个位置.我们可以用 Seek()函数返回当前的文件指针位置( 即下一个要读写的字节 );用 Loc()函数返回上一次读写的字节位置,除非用 Seek 语句移动了指针,Loc()返回值总比 Seek()的小1.我们来看下面的例子:Open “student.txt” f
7、or Binary as #1 该语句用二进制的方式打开了 student.txt 文件.(二)读文件1、顺序文件顺序文件的读取有三种方式:(1)Line Input # 语句该语句从打开的顺序文件中读取一行数据。这里的一行指的是从当前指针位置开始到回车符或回车换行符之间的所有数据。Line Input # 语句的语法格式如下:Line Input # 文件号,变量号 说明:“文件号”是打开文件时所用的文件号;“变量号”使用来存放读出数据的一个或多个变量,如果有多个变量,中间用空格分割开。Input# 语句为参数列表中的每一个变量读取文件的一个域,并将读出的域存入变量中。该语句只能顺序的从第一
8、个域开始,直到读取想要的域。请看下面代码:Dim strLine As StringOpen “c:vbtest.txt“ For Input As #1Do Until EOF(1)(eof()是一个函数,所以它有函数值,它的函数值有两个 true 和 false。它的()里的1 就是参数。它的含义是:读取文件的指针指到文件尾时,它的值就是 true。还没有读到文件尾时,它的值为 false。括号里的参数是它判断的文件的文件号。这个函数使用的范围太有限了!平时做计算用不到它,只在读取顺序文件时才用的到。DO while not EOF(1)解释:判断当 eof(1)的值为 true 时停止
9、do 循环。这一语句经常用到顺序文件的读取中。)Line Input #1, strLinetext1.Text = text1.Text + strLine + Chr(13) + Chr(10)LoopClose #1 1、在所有的计算机语言中,ascii 码 10 都是代表换行符。在键盘上没有对应按键,只在各种计算机语言程序中出现。2、在 vb 及以前的 BAsic 版本中,chr(10)都是调用 ascii 码 10,即换行符。3、无论是在显示还是打印语句,执行 chr(10)时都是要换一行(不同于回车),这在早期 DOS 版本的 Basic 中非常有用。4、“回车”Chr(13)与“
10、换行”Chr(10)的区别,“回车”代表上一句终了,再输入或输出就是下一句了。而“换行”时前一句并没有结束,前后还是一句话,仅仅是从形式上“换行”后的部分放到下一行,看起来跟回车的形式一样。5、但是,VB 中要换行时,却是要 Chr(10)+ Chr(13),即两个 ASC 码。单独一个 Chr(10),却不能换行了。此段代码逐行读取一个文件到文本框中。(2)Input 函数此函数可以从顺序文件中一次读取指定长度的字符串。具体地说,就是从文件的当前位置开始,读取指定个数的字符,然后将他们返回。Input 函数可以读取包括换行符,回车符,空格符等在内的各种字符。下面是它的语法格式:变量 = In
11、put(串长度,文件号)例如,要从一个打开文件中读取 12 个字符并复制到变量 file 中,我们可以这样写:file = Input(12,filenum) 如果要将整个文件复制到变量,请使用 InputB 函数将字节从文件复制到变量。由于InputB 函数返回一个 ASCII 字符串,因此,必须用 StrCopy 函数将 ASCII 字符串转换为Unicode 字符串。代码如下:file = StrCopy (Input (LOF(filenanum ),filenum),vbUnicode ) (3)Input # 语句Input #语句可以从文件中同时向多个变量内读入数据,而且读入的数
12、据可以是不同类型的。下面使它的语法格式:Input # 文件号,变量列表 例如,我们要在文件 student.txt 中写入数据, 下面是代码:Open “student.txt“ For Output As #filenumWrite #filenum, “张三“, “初一年级“, 14Write #filenum, “李四“, “职业高中“, 18Dim name As String, nianji As String, age As IntegerDim name1 As String, nianji1 As String, age1 As IntegerOpen “student.tx
13、t“ For Input As #filenumInput #filenum, name, nianji, ageInput #filenum, name1, nianji1, age1Close #filenum 执行结果:name=”张三” ,nianji = “初一年级” ,age =14 name=”李四” ,nianji = “职业高中” ,age =18 2、随机文件读取随机文件是可以使用 Get # 语句,数据从文件的一个指定记录中读出后, 存入一个用户自定义的变量中.语法格式: Get # FileNum ,RecNum,UserType说明:(1)FileNum 是要打开的文
14、件号;RecNum 是要读取的记录号,若省略,则读取下一个记录(2)UserType 是一个用来存放读出数据的用户自定义的数据类型变量.下面是一个例子:Get # 1,5,Student 该语句读取文件号为 1 的文件中的第 5 条记录.3、二进制文件读写二进制文件的方法和读写随机文件的方法基本相同,下面是相关的语句格式及其说明:格式: Get #fileNumber ,Pos, Var功能: 用二进制方式,从文件的中指定的位置开始读取,所给变量长度的数据说明:(1)FileNumber 是以二进制方式打开的文件号.(2)Pos 用来指定读写操作发生时的字节位置, 若省略,则使用当前文件指针位
15、置.(3)Var 是用来存放读出的数据的变量. 该语句会自动根据 var 变量包含的字节长度读取适当的文件,如果 Var 是一个可变长度的字符串变量, 则传送的字节数等于 Var 中目前的字节数.对于文件长度的判断我们可以使用 Lof()函数,Eof() 函数检查文件的结尾位置 .下面的代码复制 studert.txt 文件到 student1.txt 文件中Dim ar As String * 1, i As IntegerOpen “c:student.txt“ For Binary As #1Open “c:student2.txt“ For Binary As #2For i = 1
16、To LOF(1)Get #1, , arPut #2, , arNext iClose #1, #2 (三)写文件1、 顺序文件写顺序文件我们可以用 Write # 和 Print #语句向一个已经打开的文件中写入数据 .下面是他们的格式和说明:Print # 的语法格式:Print # 文件号,变量列表 例如,将文本框中的文本写到文件中 ,代码如下:Open “file.txt“ For Output As #filenumInput #filenum, text1.text Write # 语句的语法格式 :Write # 文件号,变量列表 说明:用 Write # 语句写入的信息便于以
17、后用 Input #语句来读取数据,因为 Write #语句自动将写入到文件中的信息用逗号分开,并为字符串数据加上双引号. 例如:Open “student.txt“ For Output As #filenumWrite #filenum, “张三“, “初一年级“, 14Write #filenum, “李四“, “职业高中“, 18 2、 随机文件向随机文件中写入数据,使用 Put 语句. 语法格式如下:Put # FileNum ,RecNum,UserType 说明:(1) FileNum 是要打开的文件号;RecNum 是要写入的记录号,若省略,则再上一次用 Get 和 Put 语
18、句所读写过的记录的后一条记录中写入,如果没有执行过 Get 和 Put 语句, 就从第一条记录开始(2)UserType 是包含要写入数据的用户自定义的数据类型变量.例如: 我们向前面的student.txt 文件中的第 5 个记录写入数据, 可用这些语句:stud.No = 0301stud.Name = “王武”stud.Age =20Put #1 ,5,stud 如果要插入的数据不只一两条的话,首先要确定文件和每条记录的长度 ,这样就可以计算出文件中究竟有多少条记录.我们可以用 Lof()函数返回文件的长度 ,Len()函数返回每个记录的长度,计算文件中的记录个数可以用文件的长度除以给个
19、记录的长度. 示例如下:Nextrec= (Lof(1)Len(UserType)+1Put #1,Nextrec,UserType 3、二进制文件下面是以二进制方式写入文件的语句格式及其说明:格式:Put #fileNumber ,Pos, Var 功能: 用二进制方式,从文件的中指定的位置开始写入,所给变量长度的数据说明:(1)FileNumber 是以二进制方式打开的文件号.(2)Pos 用来指定写操作发生时的字节位置, 若省略,则使用当前文件指针位置.(3)Var 是用来存放写入的数据的变量. 该语句会自动根据 var 变量包含的字节长度写入文件,如果 Var 是一个可变长度的字符串变量, 则传送的字节数等于 Var 中目前的字节数 文章来源:杭州网站建设