第 6章 文件操作
学习目标:
? 了解 VB的文件系统
? 掌握读写顺序文件
? 掌握读写随机文件
? 掌握文件系统控件的应用
第 6章 文件操作
教学内容:
6.1 文件分类
6.2 顺序文件的读写
6.3 随机文件的读写
6.4 文件系统控件
6.5 顺序文件应用案例
6.1 文件分类
1,顺序文件
? 文件中的记录按顺序存放
? 按第一个记录的存储位置顺序访问
2,随机文件
? 可按任意次序读写文件 (按记录号 )
? 每个记录的长度必须相同
3,二进制文件
? 文件是字节的集合
? 允许程序按所需的任何方式组织和访问数据
本章主要介绍顺序文件和随机文件的读写操作
返回目录
6.2 顺序 文件读写 - 读顺序文件
读顺序文件:打开 → 读取 → 关闭
1,打开现存的顺序文件
Open pathname For Input As #filenumber [Len=buffersize]
? Pathname:文件路径名
? Filenumber:文件号
? Len:指定缓冲区大小
2,读顺序文件
Line Input #文件号,变量名
Input #文件号,变量列表
Input(字符数,[#]文件号 )
3,关闭 文件
Close [#] [文件号 ],[#] [文件号 ]……
返回目录
6.2 顺序 文件读写 - 读顺序文件
[例 6.1] 用 Line Input语句读出 并显示 t1.txt文件的内容
Private Sub Form_Click()
Dim NextLine As String
Open "t1.txt" For Input As #1 '打开文件
Do While Not EOF(1) '循环至文件尾
Line Input #1,NextLine '读入一行数据
Print NextLine
Loop
Close
End Sub
返回目录
6.2 顺序 文件读写 - 读顺序文件
[例 6.2] 用 Input语句读出 并显示 t1.txt文件的内容
Private Sub Form_Click()
Dim s1 As String,s2 As String,s3 As String
Open "t1.txt" For Input As #1
Do While Not EOF(1)
Input #1,s1,s2,s3
Print s1,s2,s3
Loop
Close
End Sub
返回目录
6.2 顺序 文件读写 - 写顺序文件
写顺序文件:打开 → 写入 → 关闭
1,打开 /创建顺序文件
Open pathname For Output As #filenumber [Len=buffersize]
? 功能:向文件中写入数据
Open pathname For Append As #filenumber [Len=buffersize]
? 功能:在文件尾追加记录
若文件不存在, 系统将先创建再打开
2,写 顺序文件
Print #filenumber,[outputlist]
Write #filenumber,[outputlist]
与 Print #不同的是, Write #可在数据项之间自动插入逗号
返回目录
6.2 顺序 文件读写 - 读顺序文件
[例 6.3] 先创建 C:\temp.txt,然后读出并显示该文件内容
Private Sub Form_Click()
Dim s1 As String,s2 As String,s3 As String
Open "c:\temp.txt" For Append As #1
Write #1,"Ding Xiao",25,"男 " '写入以逗号隔开的数据
Write #1,"Wang Xiao",23,"女 "
Close
Open "c:\temp.txt" For Input As #1
Do While Not EOF(1)
Input #1,s1,s2,s3
Print s1,s2,s3
Loop
End Sub
返回目录
6.3 随机 文件读写 - 读写随机文件
随机文件的特点:
? 以定长记录为单位, 通过记录号访问文件内容
? 文件打开后, 可读可写
1,定义记录类型
先定义记录类型, 再定义记录类型变量 。 例如:
Type TeacherRec
Name As String*30
Wage As Single
Level As String*16
End Type
Dim varTeacherRec As TeacherRec
返回目录
注:对定义在窗体中的记录
类型, Type前若无 Private,
则默认为 Public。
6.3 随机 文件读写 - 读写随机文件
2,打开及关闭随机文件
打开,Open 文件路径名 For Random [Access access] As #文
件号 [Len = reclength]
?access参数指出打开方式,Read,Write,缺省为可写可读
?Len参数指定每个记录的长度
3,读写随机文件
读,Get [#]文件号,[记录号 ],变量名
写,Put [#]文件号,[记录号 ],变量名
若记录号缺省, 则对上一次 Get或 Put操作后的下一个记
录进行操作 。
返回目录
6.3 随机 文件读写 - 读写随机文件
[例 6.4]定义一个有关教师工资及职称的记录类型, 然
后建立一个随机文件, 再往其中写入记录, 最后
再将写入的记录输出 。
Private Type TeacherRec '定义记录类型
Name As String * 30
Wage As Single
Level As String * 16
End Type
返回目录
6.3 随机 文件读写 - 读写随机文件
Private Sub Form_Click()
Dim varTeacherRec As TeacherRec '定义记录类型变量
Open "C:\teacher.txt" For Random As #1
With varTeacherRec '给记录类型变量的各字段赋值
.Name = "丁进 ",,Wage = 1560.5,,Level = "讲师 "
End With
Put #1,,varTeacherRec '将记录类型变量的值写入文件
Get #1,1,varTeacherRec '将第一个记录的内容读到变量中
Print varTeacherRec.Name '输出各字段的值
Print varTeacherRec.Wage
Print varTeacherRec.Level
Close #1
End Sub
返回目录
6.3 随机 文件读写 - 随机文件应用示例
1,设计窗体
2,编写代码
'定义记录类型及记录变量
Private Type ShuJu
Name As String * 10
Tel As String * 10
End Type
Dim Ren As ShuJu,n As Integer
返回目录
6.3 随机 文件读写 - 随机文件应用示例
'单击, 新建文件, 按钮的事件响应代码
Private Sub CmdNew_Click()
Open "address.txt" For Random As #1 Len = Len(Ren)
n = InputBox("人数?")
For i = 1 To n
Ren.Name = InputBox("Input name:")
Ren.Tel = InputBox("Input Tel.NO:")
Put #1,i,Ren
Next i
Close #1
End Sub
返回目录
6.3 随机 文件读写 - 随机文件应用示例
'单击, 追加记录, 按钮的事件响应代码
Private Sub CmdAppend_Click()
Open "address.txt" For Random As #1 Len = Len(Ren)
n = LOF(1) / Len(Ren) 'LOF函数返回文件的字节数
m = InputBox("追加几条记录?")
For i = 1 To m
Ren.Name = InputBox("Input name:")
Ren.Tel = InputBox("Input Tel.NO:")
Put #1,n + i,Ren
Next i
Close #1
End Sub
返回目录
6.3 随机 文件读写 - 随机文件应用示例
'单击, 输出记录, 按钮的事件响应代码
Private Sub CmdOutput_Click()
Open "address.txt" For Random As #1 Len = Len(Ren)
i = InputBox("输出第几条记录 ")
Get #1,i,Ren
Text1.Text = Ren.Name + Ren.Tel
Close #1
End Sub
返回目录
6.4 文件系统控件 - 驱动器列表控件
1,主要属性
Drive:驱动器盘符 。 只能在代码中设置
例, Drive1.Drive="C:"
2,主要事件
Change事件:控件中显示的内容改变时触发该事件
利用 Change事件可将该控件与文件夹列表控件一起使
用:驱动器盘符改变时, 文件夹列表控件中所显示的文
件夹也作相应改变 。
返回目录
6.4 文件系统控件 - 文件夹列表控件
1,主要属性
Path,控件的默认文件夹 。 只能在代码中设置
例, Dir1.Path = "C:\windows"
2,主要事件
Change事件:改变文件夹时触发该事件
利用 Change事件可将该控件与文件列表控件一起使用:
选定文件夹控件中的某一文件夹, 文件列表控件则显示
此文件夹中的文件 。
返回目录
6.4 文件系统控件 - 文件列表控件
1,主要属性
?Archive,Hidden,Normal,ReadOnly、
System:是否 显示具有指定属性的文件
?FileName,选定文件的路径名
?ListCount,文件列表中的文件总数
?ListIndex:选定文件在列表中的索引值 (0~ ListCount-1)
?List:一个字符串数组, 其成员为控件中显示的文件
?MultiSelect:对列表中的文件可否复选以及复选方式
?Path:控件所对应的文件夹, 默认为工程所在的路径
?Pattern:控件中显示的文件类型, 默认为 *.*
?Selected:表明列表中某个文件是否被选中
2,主要事件
PathChange:控件的 Path属性改变时触发该事件
返回目录
6.4 文件系统控件 - 文件列表控件
例,
Private Sub Form_Load()
File1.Pattern = "*.txt", File1.Path = "C:\windows"
File1.Archive = True, File1.Hidden = False
File1.Normal = False, File1.ReadOnly = False
File1.System = False
End Sub
Private Sub Form_Click()
Dim I As Integer
For I = 0 To File1.ListCount - 1
If File1.Selected(I) Then
Print File1.List(I)
End If
Next I
End Sub
返回目录
6.4 文件系统控件 - 应用示例
工程,FileOperation
窗体,frmFileOperation
?4个按钮,CmdCopy、
CmdMove,CmdDel、
CmdExit
?源文件框架,Frame1
?目标框架,Frame2
返回目录
6.5 顺序 文件应用案例 - 选择题答题及批阅
工程,xz.vbp
工程的组成:
?模块, xt.bas
(含将窗体居中安放的过程 )
?试题选择窗体,Frmxt.frm
?考生答题窗体,Frmxz.frm
?输入跳转题号的窗体,Frmti.frm
?提示还有未做试题的窗体,Frmts.frm
?答题结果统计窗体,Frmtj.frm
?退出答题界面时的提示窗体,frmtc.frm
返回目录
学习目标:
? 了解 VB的文件系统
? 掌握读写顺序文件
? 掌握读写随机文件
? 掌握文件系统控件的应用
第 6章 文件操作
教学内容:
6.1 文件分类
6.2 顺序文件的读写
6.3 随机文件的读写
6.4 文件系统控件
6.5 顺序文件应用案例
6.1 文件分类
1,顺序文件
? 文件中的记录按顺序存放
? 按第一个记录的存储位置顺序访问
2,随机文件
? 可按任意次序读写文件 (按记录号 )
? 每个记录的长度必须相同
3,二进制文件
? 文件是字节的集合
? 允许程序按所需的任何方式组织和访问数据
本章主要介绍顺序文件和随机文件的读写操作
返回目录
6.2 顺序 文件读写 - 读顺序文件
读顺序文件:打开 → 读取 → 关闭
1,打开现存的顺序文件
Open pathname For Input As #filenumber [Len=buffersize]
? Pathname:文件路径名
? Filenumber:文件号
? Len:指定缓冲区大小
2,读顺序文件
Line Input #文件号,变量名
Input #文件号,变量列表
Input(字符数,[#]文件号 )
3,关闭 文件
Close [#] [文件号 ],[#] [文件号 ]……
返回目录
6.2 顺序 文件读写 - 读顺序文件
[例 6.1] 用 Line Input语句读出 并显示 t1.txt文件的内容
Private Sub Form_Click()
Dim NextLine As String
Open "t1.txt" For Input As #1 '打开文件
Do While Not EOF(1) '循环至文件尾
Line Input #1,NextLine '读入一行数据
Print NextLine
Loop
Close
End Sub
返回目录
6.2 顺序 文件读写 - 读顺序文件
[例 6.2] 用 Input语句读出 并显示 t1.txt文件的内容
Private Sub Form_Click()
Dim s1 As String,s2 As String,s3 As String
Open "t1.txt" For Input As #1
Do While Not EOF(1)
Input #1,s1,s2,s3
Print s1,s2,s3
Loop
Close
End Sub
返回目录
6.2 顺序 文件读写 - 写顺序文件
写顺序文件:打开 → 写入 → 关闭
1,打开 /创建顺序文件
Open pathname For Output As #filenumber [Len=buffersize]
? 功能:向文件中写入数据
Open pathname For Append As #filenumber [Len=buffersize]
? 功能:在文件尾追加记录
若文件不存在, 系统将先创建再打开
2,写 顺序文件
Print #filenumber,[outputlist]
Write #filenumber,[outputlist]
与 Print #不同的是, Write #可在数据项之间自动插入逗号
返回目录
6.2 顺序 文件读写 - 读顺序文件
[例 6.3] 先创建 C:\temp.txt,然后读出并显示该文件内容
Private Sub Form_Click()
Dim s1 As String,s2 As String,s3 As String
Open "c:\temp.txt" For Append As #1
Write #1,"Ding Xiao",25,"男 " '写入以逗号隔开的数据
Write #1,"Wang Xiao",23,"女 "
Close
Open "c:\temp.txt" For Input As #1
Do While Not EOF(1)
Input #1,s1,s2,s3
Print s1,s2,s3
Loop
End Sub
返回目录
6.3 随机 文件读写 - 读写随机文件
随机文件的特点:
? 以定长记录为单位, 通过记录号访问文件内容
? 文件打开后, 可读可写
1,定义记录类型
先定义记录类型, 再定义记录类型变量 。 例如:
Type TeacherRec
Name As String*30
Wage As Single
Level As String*16
End Type
Dim varTeacherRec As TeacherRec
返回目录
注:对定义在窗体中的记录
类型, Type前若无 Private,
则默认为 Public。
6.3 随机 文件读写 - 读写随机文件
2,打开及关闭随机文件
打开,Open 文件路径名 For Random [Access access] As #文
件号 [Len = reclength]
?access参数指出打开方式,Read,Write,缺省为可写可读
?Len参数指定每个记录的长度
3,读写随机文件
读,Get [#]文件号,[记录号 ],变量名
写,Put [#]文件号,[记录号 ],变量名
若记录号缺省, 则对上一次 Get或 Put操作后的下一个记
录进行操作 。
返回目录
6.3 随机 文件读写 - 读写随机文件
[例 6.4]定义一个有关教师工资及职称的记录类型, 然
后建立一个随机文件, 再往其中写入记录, 最后
再将写入的记录输出 。
Private Type TeacherRec '定义记录类型
Name As String * 30
Wage As Single
Level As String * 16
End Type
返回目录
6.3 随机 文件读写 - 读写随机文件
Private Sub Form_Click()
Dim varTeacherRec As TeacherRec '定义记录类型变量
Open "C:\teacher.txt" For Random As #1
With varTeacherRec '给记录类型变量的各字段赋值
.Name = "丁进 ",,Wage = 1560.5,,Level = "讲师 "
End With
Put #1,,varTeacherRec '将记录类型变量的值写入文件
Get #1,1,varTeacherRec '将第一个记录的内容读到变量中
Print varTeacherRec.Name '输出各字段的值
Print varTeacherRec.Wage
Print varTeacherRec.Level
Close #1
End Sub
返回目录
6.3 随机 文件读写 - 随机文件应用示例
1,设计窗体
2,编写代码
'定义记录类型及记录变量
Private Type ShuJu
Name As String * 10
Tel As String * 10
End Type
Dim Ren As ShuJu,n As Integer
返回目录
6.3 随机 文件读写 - 随机文件应用示例
'单击, 新建文件, 按钮的事件响应代码
Private Sub CmdNew_Click()
Open "address.txt" For Random As #1 Len = Len(Ren)
n = InputBox("人数?")
For i = 1 To n
Ren.Name = InputBox("Input name:")
Ren.Tel = InputBox("Input Tel.NO:")
Put #1,i,Ren
Next i
Close #1
End Sub
返回目录
6.3 随机 文件读写 - 随机文件应用示例
'单击, 追加记录, 按钮的事件响应代码
Private Sub CmdAppend_Click()
Open "address.txt" For Random As #1 Len = Len(Ren)
n = LOF(1) / Len(Ren) 'LOF函数返回文件的字节数
m = InputBox("追加几条记录?")
For i = 1 To m
Ren.Name = InputBox("Input name:")
Ren.Tel = InputBox("Input Tel.NO:")
Put #1,n + i,Ren
Next i
Close #1
End Sub
返回目录
6.3 随机 文件读写 - 随机文件应用示例
'单击, 输出记录, 按钮的事件响应代码
Private Sub CmdOutput_Click()
Open "address.txt" For Random As #1 Len = Len(Ren)
i = InputBox("输出第几条记录 ")
Get #1,i,Ren
Text1.Text = Ren.Name + Ren.Tel
Close #1
End Sub
返回目录
6.4 文件系统控件 - 驱动器列表控件
1,主要属性
Drive:驱动器盘符 。 只能在代码中设置
例, Drive1.Drive="C:"
2,主要事件
Change事件:控件中显示的内容改变时触发该事件
利用 Change事件可将该控件与文件夹列表控件一起使
用:驱动器盘符改变时, 文件夹列表控件中所显示的文
件夹也作相应改变 。
返回目录
6.4 文件系统控件 - 文件夹列表控件
1,主要属性
Path,控件的默认文件夹 。 只能在代码中设置
例, Dir1.Path = "C:\windows"
2,主要事件
Change事件:改变文件夹时触发该事件
利用 Change事件可将该控件与文件列表控件一起使用:
选定文件夹控件中的某一文件夹, 文件列表控件则显示
此文件夹中的文件 。
返回目录
6.4 文件系统控件 - 文件列表控件
1,主要属性
?Archive,Hidden,Normal,ReadOnly、
System:是否 显示具有指定属性的文件
?FileName,选定文件的路径名
?ListCount,文件列表中的文件总数
?ListIndex:选定文件在列表中的索引值 (0~ ListCount-1)
?List:一个字符串数组, 其成员为控件中显示的文件
?MultiSelect:对列表中的文件可否复选以及复选方式
?Path:控件所对应的文件夹, 默认为工程所在的路径
?Pattern:控件中显示的文件类型, 默认为 *.*
?Selected:表明列表中某个文件是否被选中
2,主要事件
PathChange:控件的 Path属性改变时触发该事件
返回目录
6.4 文件系统控件 - 文件列表控件
例,
Private Sub Form_Load()
File1.Pattern = "*.txt", File1.Path = "C:\windows"
File1.Archive = True, File1.Hidden = False
File1.Normal = False, File1.ReadOnly = False
File1.System = False
End Sub
Private Sub Form_Click()
Dim I As Integer
For I = 0 To File1.ListCount - 1
If File1.Selected(I) Then
Print File1.List(I)
End If
Next I
End Sub
返回目录
6.4 文件系统控件 - 应用示例
工程,FileOperation
窗体,frmFileOperation
?4个按钮,CmdCopy、
CmdMove,CmdDel、
CmdExit
?源文件框架,Frame1
?目标框架,Frame2
返回目录
6.5 顺序 文件应用案例 - 选择题答题及批阅
工程,xz.vbp
工程的组成:
?模块, xt.bas
(含将窗体居中安放的过程 )
?试题选择窗体,Frmxt.frm
?考生答题窗体,Frmxz.frm
?输入跳转题号的窗体,Frmti.frm
?提示还有未做试题的窗体,Frmts.frm
?答题结果统计窗体,Frmtj.frm
?退出答题界面时的提示窗体,frmtc.frm
返回目录