第九章 文件 ( 2学时)
9.1 文件系统控件
9.2 文件的读写
9.3 常用的文件操作语句和函数
9.1 驱动器、目录和文件列表框
Sub drvDrive_Change()
dirDirectory.Path = drvDrive.Drive
End Sub
Sub dirDirectory_Change()
filFile.Path = dirDirectory.Path
End Sub
Sub Form_Load()
Item =,所有文件 (*.*)”
cboType.AddItem Item + Space(20 - Len(Item)) + "*.*"
Item = "窗体文件 (*.FRM)"
cboType.AddItem Item + Space(20 - Len(Item)) + "*.FRM"
Item = "位图文件 (*.BMP)"
cboType.AddItem Item + Space(20 - Len(Item)) + "*.BMP"
cboType.ListIndex = 2
End Sub
Sub cboType_Click()
filFile.Pattern = Mid(cboType.Text,21)
End Sub
Sub filFile_Click( )

End Sub
Sub filFile_DblClick( )

End Sub
例 9.1示例程序
1,驱动器列表框
Drive属性:
[对象,]Drive [= drive]
Change事件:
重新设置 Drive属性引发 Change事件
2,目录列表框
Path属性,
[对象,]Path [= pathname]
Change事件:
重新设置 Path 属性引发 Change事件
3,文件列表框
Path属性:
显示该路径下的文件。
重新设置 Path属性引发 PathChange事件。
Pattern属性:
显示的文件类型。
[对象,]Pattern [= value]
重新设置 Pattern属性引发 PatternChange事件。
例如,filFile.Pattern =,*.frm”,显示 *.frm文件。
FileName属性:
[对象,]FileName [= pathname]
引用时只返回文件名,相当于 filFile.List(filFile,ListIndex),需用 Path属性得到其路径;设置时可带路径。
Click,DblClick事件:
例如,单击输出文件名。 例如,双击执行可执行程序。
Sub filFile_Click( ) Sub filFile_DblClick( )
MsgBox filFile.FileName ChDir (dirDirectory.Path) ’ 改变当前目录
End Sub RetVal = Shell(filFile.FileName,1) ’ 执行程序
End Sub
9.2 文件的读写文件:存储在外部介质上数据的集合。
按名存取
1,记录由若干个相互关联的数据项组成。
例如,由学生的学习成绩信息组成的记录:
学号 姓名 数学成绩 语文成绩 物理成绩 总分数据项
2,文件及其种类文件是记录的集合顺序访问模式:顺序文件,记录可长可短随机访问模式:随机文件,记录的长度相同二进制访问模式:二进制文件(可认为记录长度为 1)
(1) 顺序文件按顺序依次把记录写入文件;
按顺序依次把记录读出来。
记录 1 记录 2 记录 N 文件结束标志文本文件:一行一条记录,记录可长可短,以“换行”字符为分隔符号。
(2) 随机文件随机文件可以直接访问文件中的任意一个记录。
记录长度相同根据记录号访问
#1 记录 1 #2 记录 2 #N 记录 N
(3) 二进制文件直接把二进制码存放在文件中。
1,打开文件
Open,文件名” [For 模式 ] As [#]文件号 [Len=记录长度 ]
(1) 模式
OUTPUT:写操作
INPUT:读操作
APPEND:追加到文件未尾
(2) 文件号
1~ 511,可以用 FreeFile函数获得下一个可利用的文件号。
(3) 记录长度小于或等于 32767的整数,它指定数据缓冲区的大小。
例如,打开 C:\VB\SCORE,供写入数据,指定文件号为 #1。
OPEN "C:\VB\SCORE" FOR OUTPUT AS #1
一,顺序访问模式打开文件 读出或写入 关闭文件
2,写入命令
Print #文件号,[输出列表 ]
保存文本框假定文本框的名称为 txtTest,文件名为 TEST.DAT。
方法 1:把整个文本框的内容一次性地写入文件。
Open "TEST.DAT" For Output As #1
Print #1,txtTest.Text
Close #1
方法 2:把整个文本框的内容一个字符一个字符地写入文件。
Open "TEST.DAT" For Output As #1
For i=1 To len(txtTest.Text)
Print #1,Mid(txtTest.Text,i,1);
Next i
Close #1
Write #文件号,[输出列表 ]
紧凑格式。数据项之间插入“,”,并加上双引号。
例如,命令,Write #1,"One","Two",123
内容,"One","Two",123
3,关闭文件
Close [[#]文件号 ][,[#]文件号 ]...
例如,Close #1,#2,#3
4,读顺序文件
INPUT #文件号,变量列表把读出的每个数据项分别存放到所对应的变量。
LINE INPUT #文件号,字符串变量读一行到变量中,主要用来读取文本文件。
INPUT$(读取字符数,#文件号 )
随意读取字符
5,函数
LOF(文件号 ):返回文件的长度 (总字节数 )。
EOF(文件号 ):返回读写位置。
文件未尾时,EOF函数为 True,否则为 False。
读文本文件到文本框(共三种方法)
假定文本框名称为 txtTest,文件名为 MYFILE.TXT。
方法 1:一行一行读
txtTest.Text = ""
Open "MYFILE.TXT" For Input As #1
Do While Not EOF(1)
Line Input #1,InputData
txtTest.Text = txtTest.Text + InputData+vbCrLf
Loop
Close #1
方法 2:一次性读
txtTest.Text = ""
Open "MYFILE.TXT" For Input As #1
txtTest.Text = Input( LOF(1),1)
Close #1
方法 3:一个个字符读
Dim InputData as String*1
txtTest.Text = ""
Open "MYFILE.TXT" For Input As #1
Do While Not EOF(1)
InputData= Input(1,#1)
txtTest.Text = txtTest.Text + InputData
Loop
Close #1
例 9.3 文件加密程序
Sub cmdOpen_Click( )
CommonDialog1.Action=1
txtSource.Text = ""
Open CommonDialog1.FileName For Input As #1
Do While Not EOF(1)
Line Input #1,InputData
txtSource.Text = txtSource.Text + InputData+vbCrLf
Loop
Close #1
End Sub
Sub cmdSave_Click()
CommonDialog1.Action=2
Open CommonDialog1.FileName For Output As #1
Print #1,txtTarget.Text
Close #1
End Sub
txtTargettxtSource
参阅例 3.26
二、随机文件
1,打开
Open "文件名 " For Random As #文件号 [Len=记录长度 ]
2,写操作
Put [#]文件号,[记录号 ],变量名将一个记录变量的内容写到指定的记录位置处。
忽略记录号,则表示在当前记录后的位置插入一条记录。
3,读操作
Get [#]文件号,[记录号 ],变量名忽略记录号,则读出当前记录后的那一条记录。
例 9.4 学生信息管理程序。
追加记录 (Command1):将一个学生的信息作为一条记录添加到随机文件末尾。
显示记录 (cmdDisplay):显示在右边文本框 (text4)中指定的记录。
1,打开
Open "文件名 " For Binary As #文件号
2,写操作
Put [#]文件号,[位置 ],变量名写入长度等于变量长度的数据。
3,读操作
GET [#]文件号,[位置 ],变量名从指定位置开始读出长度等于变量长度的数据存入变量中,数据读出后移动变量长度位置,如果忽略位置,则表示从文件指针所指的位置开始读出数据,数据读出后移动变量长度位置。
三、二进制文件例 9.5 文件复制
Dim char As Byte
Dim FileNum1,FileNum2 as Integer
FileNum1 = FreeFile
'打开源文件
Open "C:\STUDENT.DAT" For Binary As # FileNum1
FileNum2 = FreeFile
'打开目标文件
Open "C:\STUDENT.BAK" For Binary As # FileNum2
Do While Not EOF(FileNum1)
'从源文件读出一个字节
Get #1,,char
'将一个字节写入目标文件
Put #2,,char
Loop
Close #FileNum1
Close #FileNum2
9.3 常用的文件操作语句和函数
1,FileCopy语句格式,FileCopy source,destination
功能:复制一个文件。
说明,FileCopy语句不能复制一个已打开的文件。
2,Kill语句格式,Kill pathname
功能:删除文件。
说明,pathname中可以使用统配符,*”和,?”。
例如,Kill "*.TXT"
3,Name 语句格式,Name oldpathname As newpathname
功能:重新命名一个文件或目录。
说明:
(1) Name具有移动文件的功能。
(2) 不能使用统配符,*”和,?”,不能对一个已打开的文件上使用 Name语句。
4,ChDrive 语句格式,ChDrive drive
功能:改变当前驱动器。
说明:如果 drive为“”,则当前驱动器将不会改变;如果 drive中有多个字 符,则 ChDrive只会使用首字母。
5,MkDir 语句格式,MkDir path
功能:创建一个新的目录。
6,ChDir 语句格式,ChDir path
功能:改变当前目录。
例如,ChDir "D:\TMP"
7,RmDir 语句格式,RmDir path
功能:删除一个存在的目录。
说明:只能删除空目录 。
8,CurDir函数格式,CurDir[(drive)]
功能:利用 CurDir函数可以确定任何一个驱动器的当前目录。
说明,drive为“”,则 CurDir返回当前驱动器的当前目录。
例 9.6 利用 ChDrive和 ChDir语句改写例 9.1中的 File1_DblClick()事件过程。
Sub File1_DblClick()
ChDrive Drive1.Drive ' 设置缺省驱动器
ChDir File1.Path ' 设置缺省目录
RetVal = Shell(File1.FileName,1)
End Sub
例 9.7 为例 9.1添加事件过程 File1_MouseDown(),使之支持 Del键,即按下
Del键删除选定的文件。
Sub File1_KeyDown(KeyCode As Integer,Shift As Integer)
If KeyCode = vbKeyDelete Then
ChDrive Drive1.Drive
ChDir File1.Path
Kill File1.FileName
File1.Refresh ' 文件删除后更新文件列表框
End If
End Sub