第七章 文件 本章重点 7.1 文件管理控件 7.2 文件处理 7.3 练习
重点 掌握 三个文件控件的同步 顺序文件的处理 驱动器列表框 Drive属性 Change事件 目录列表框 Path属性 Change事件 文件列表框 filename,listIndex属性 Click事件 三个文件控件的同步 文件的基本概念,顺序文件的处理 重点 三个文件控件的同步 顺序文件的处理
7.1文件管理控件 VB中用于文件管理操作的控件有: 驱动器列表框、目录列表框和文件列表框 驱动器列表框 文件列表框 文件夹列表框
驱动器列表框 1.驱动器列表框(DriveListBox) ListIndex:选定驱动器的索引值(只读),从0开始计 (1)属性: name: Drive1(默认) Drive:返回Drive控件中选取的驱动器 是运行时属性。 改变Drive属性的两种方法: ① 在驱动器控件中选取 ② 用赋值语句:Drive1.Drive=“d:\” ListIndex:选定驱动器的索引值(只读),从0开始计 ListCount:列表中驱动器总数(只读) (2)事件: Change:改变Drive属性时触发. (选择、输入或给Drive属性赋值时)
驱动器列表框 1.驱动器列表框(DriveListBox) (3) ChDrive语句: 作用:改变当前工作驱动器 格式: ChDrive Drive 例如: ChDrive "D:" Open "ABC.txt" For Input As #1 ChDrive "C:" Open "ABC.txt" For Output As #2
目录列表框 2.目录列表框(DirListBox) ListIndex:选定文件夹的索引值(只读) 当前文件夹的索引值为-1, (1)属性: Name:Dir1(默认值) Path:设置或返回列表框中显示的当前目录 是运行时属性 改变Path属性的两种方法: ① 在控件中双击指定文件夹 ② 用赋值语句:Dir1.Path=路径 ListIndex:选定文件夹的索引值(只读) 当前文件夹的索引值为-1, 所包含的子文件夹从0开始计数,依次递增 它的上级文件夹依次递减 ListCount:列表中驱动器总数(只读) (2)事件: Change:改变Path属性时发生 (双击目录、赋值改变Path属性)
目录列表框 2.目录列表框(DirListBox) (3) ChDir语句 作用:改变当前工作目录 即改变系统存取文件的缺省路径 格式: ChDir Path 例如: ChDrive "D:\gh"
文件列表框 3.文件列表框 (FileListBox) Pattern:设置文件列表框所显示的文件类型 (1)属性: Name:File1(默认值) Path:设置或返回文件列表框所显示文件的路径 格式:Dir1.Path=路径 改变该属性将引发PathChange事件 Pattern:设置文件列表框所显示的文件类型 格式:File1. Pattern=”*.exe” 改变该属性将引发atternChange事件 Filename:设置/返回文件列表框中出显示的文件名 (2)事件: Click、Dblclick PathChange: 改变文件列表框的path属性时发生 PatternChange: 改变显示文件类型的模式时发生
例:利用文件管理控件实现文件的浏览 分析: 1.选定驱动器后,应该影响目录列表 事件:Drive1_Change 2.选定文件夹后,应该影响文件列表 在 Dir1_Change 事件中 3.组合框选定内容或输入内容,应该影响显示的文件类型 在 Combo1_Click事件中 在 Combo1_Change事件中
7.2 文件处理 在VB中,按照访问模式文件分为3种类型 1.顺序型: 访问模式最简单,适用于文本文件。 7.2 文件处理 在VB中,按照访问模式文件分为3种类型 1.顺序型: 访问模式最简单,适用于文本文件。 ⑴ 读写记录时都是从前向后顺序进行。 ⑵ 一行字符为一条记录,记录之间以“换行”符分隔 2.随机型: 适用于固定长度记录,记录之间无特殊分隔符 ⑴ 所有记录等长,各记录中相应的数据项长度也一样; ⑵ 根据记录号直接访问指定记录 3.二进制型: 是最原始的文件 ⑴ 内容以二进制的形式存放,无格式 ⑵ 适合于任何文件,与随机文件很类似,但要顺序读取
7.2 文件处理 文件操作的一般步骤: 使文件与内存中的某个缓冲区关联 2.存 / 取操作 向文件写入数据或从文件读取数据 3.关闭文件 7.2 文件处理 文件操作的一般步骤: 1.打开文件: 使文件与内存中的某个缓冲区关联 2.存 / 取操作 向文件写入数据或从文件读取数据 3.关闭文件 释放文件所占用的文件缓冲区
顺序文件打开 Input: 打开一个文件(已存在),对文件进行读操作 ② 文件号: 1.打开: Open 文件名 For[Input|Output|Append] As [#]文件号 ① 打开 例:打开一个D盘GH文件夹中的ABC.TXT,供写入数据, 指定文件号为#10 Input: 打开一个文件(已存在),对文件进行读操作 Output:打开一个文件,对文件进行写操作 若文件不存在,新建一个文件写入内容 若文件已存在,重写该文件,文件原内容丢失 Append:打开一个文件,对文件进行写操作 若文件已存在,把字符追加到该文件尾部 代码为: Open “d:\gh\abc.txt” For Output As #10 ② 文件号: 必选参数,为打开的文件分配的通道号 取值在1-511之间的整数
顺序文件写操作 2.写操作 (1) Print语句 格式:Print #文件号[,输出列表] 输出表列:可以是变量或常量,用,或 ;分隔。 标准格式输出: Open “abc.txt” For Output As #1 Print #1, "Visual", "Basic", "&", "Computer " Print #1, 1, 2, 3, 4 Close #1 紧凑格式输出: Open “abc.txt” For Output As #1 Print #1, "Visual"; "Basic"; "&"; "Computer " Print #1, 1; 2; 3; 4 Close #1
顺序文件写操作 2.写操作 (2) Write 语句: 格式:Write #文件号[,输出表列] 紧凑格式输出,各数据项间插入逗号,并给字符数据加“” 紧凑格式输出: Open "abc.txt" For Output As #1 Write #1, "Visual", "Basic", "&", "Computer ", Write #1, 1, 2, 3, 4 Close #1 紧凑格式输出: Open "abc.txt" For Output As #1 Write #1, "Visual", "Basic", "&", "Computer " Write #1, 1, 2, 3, 4 Close #1
文件关闭 3.关闭 如:Open “file1.txt” For Input As #1 (1)格式:Close [[#]文件号表列] Close #1 如:Open “file1.txt” For Input As #1 Open ”file1.txt” For Input As #2 如:Open “file1.txt” For Output As #1 Open ”file1.txt” For Input As #2 (2) Reset 注意: 不能共用一个通道号同时打开的两个文件 在Input模式下,可以用不同的文件号打开同一个文件 在Output和Append模式下打开的文件,在关闭之前不能用不同的文件号再重复打开 参数:指出要关闭的文件号列表,若多个文件号用,分隔 文件号省略:表示关闭当前打开的所有文件。
顺序文件读操作 4.读操作 (1)Input #文件号,变量表列 变量列表:用来存放从顺序文件中读出的数据, 用,分隔,且个数、类型与文件中的数据项一致。 Open "abc.txt" For Input As #1 Input #1, s1, s2, s3, s4 Close #1 说明:数据开始:遇到的第一个非空格字符(回车或换行) 数据结束:数值型:遇到的第一个空格、回车换行 字符型:双引号外的逗号(,)或回车
顺序文件读操作 4.读操作 (2)Line Input #文件号,变量名 参数:变量名应该是字符型或变体型; 不受空格和逗号限制,将一行作为一条记录一次读入 例如: Open "abc.txt" For Input As #1 Line Input #1, s1 Close #1 Print s1,s2
顺序文件读操作 4.读操作 (3)Input (整数,[#]文件号) 参数:整数是用来指定要读取的字符个数 例如: Open "abc.txt" For Input As #1 s1=Input (6,#1) Close #1 Print s1 5.文件函数 EOF(文件号):判断当前文件是否结束 LOF(文件号):打开文件的字节数
随机文件 以随机存取(Random Access)方式存取的文件称随机文件。 随机文件是由一组长度相等的记录组成。 随机文件特点 (1) 随机文件的记录是定长的。 (2) 记录包含有一个或多个字段(又称为域),只有一个字段的记录对应于任何一个标准类 (3) 随机文件打开后,既可读又可写,可以根据记录号访问文件中任何一个记录,无需按顺序进行。
随机文件 1.变量的声明 (1) 定义记录类型 如果记录由多个字段组成,则须在标准模块中自定义数据类型 例如: Type Student Name As String*8 ‘字符型字段必须定长 Id As String*6 End Type (2) 声明变量 如:Public Stu As Student
随机文件 格式: Open 文件名 [For Random] As [#]文件号 Len=记录长度 2.随机文件的打开 ② Len子句: 说明: ① 打开方式: For Random 打开随机文件,此方式为默认方式。 ② Len子句: 例:打开D盘GH文件夹中的ABC.dat 指定打开随机文件的记录长度 指定长度>写入长度:能正确写入,仅是浪费空间 指定长度<写入长度:产生错误 记录长度的计算:len(记录变量) 代码为: Open “d:\gh\abc.dat” For random As #1 len=len(s)
随机文件 2.随机文件的写操作 格式: Put #文件号 ,[记录号] , 变量 说明:记录号:1~231-1。可省略,但逗号不能省略。 此时默认为文件指针指向的位置 文件函数: LOF(文件号):返回打开文件的字节数 Private Sub Command1_Click() Dim s As student Open "d:\abc.dat" For Random As #1 Len = Len(s) s.name = Text1.Text s.id = Text2.Text Put #1, 1, s Close End Sub
随机文件 格式: Get #文件号 ,[记录号] , 变量 3.随机文件的读操作 说明:记录号默认值同Put语句 文件函数: EOF(文件号):判断文件是否结束 Private Sub Command2_Click() Dim s As student Open "d:\abc.dat" For Random As #1 Len = Len(s) n = InputBox("记录号") Get #1, n, s List1.AddItem s.name & s.id Close End Sub
二进制文件 1. 任何类型的文件(顺序文件或随机文件)都可以以二进制访问模式打开,二进制存取可以获取任何一个文件的原始字节。 2. 二进制使用GET#语句获取数据,用PUT#语句写入数据。 3. 二进制存取模式与随机存取模式不同之处是: 二进制存取可以定位到文件中的任一字节位置,而随机存取要定位在记录的边界上 二进制存取从文件中读取数据或向文件写入数据的字节长度取决于GET#语句或PUT#语句中“变量”的长度,而随机存取方式读写固定个数的字节(一个记录的长度)
练习 1.在 Visual Basic 中文件访问的类型有_ __. A.顺序、随机、二进制 B.顺序、随机、字符 C.顺序、十六进制、随机 D. 顺序、记录、字符 2.若磁盘文件C:\Data1.dat不存在,下列打开文件语句中,会产生错误的是______。 A. Open "C:\Data1.dat" For Output As #1 B. Open "C:\Data1.dat" For Input As #2 C. Open "C:\Data1.dat" For Append As #3 D. Open "C:\Data1.dat" For Binary As #4
练习 3.要向已有数据的C:\test\test.txt文件添加数据,正确的文件打开命令是___ __。 A. Open "C:\test\test.txt" For Append As #512 B. Open "C:\test\test.txt" For Append As #511 C. Open "C:\test\test.txt" For Output As #512 D. Open "C:\test\test.txt" For Output As #511