




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第 9 9 章章 数据文件数据文件本章主要内容9.1 文件概述文件概述9.2 顺序文件顺序文件9.3 随机文件随机文件9.4 二进制文件二进制文件9.5 文件的基本操作文件的基本操作9.6 文件系统空间文件系统空间9.1 文件概述 文件可以将程序运行时输入的数据、运行后产生的结果保存在外存中,供用户随时使用。 6.1.16.1.1数据文件的基本概念数据文件的基本概念 文件是一组相关信息的集合,是操作系统管理信息的基本单位。 VB提供了3种访问数据文件的方法: 使用VB语句和函数对文件进行读取、修改、复制等访问及操作。通过Windows的API函数进行操作。使用VB提供的FSO对文件进行访问。
2、 姓名性别年龄职称爱好张三男20助理工程师电影,运动李四男35高级工程师书法,读书,电影王五男30工程师健身,音乐字段字段记录记录 文件的结构 数据文件由记录组成,每条记录由字段组成,字段则由字符组成。如:顺序文件 数据是以ASCII码形式存储的字符。特点:v记录只能按照记录的顺序依次读/写,不能随意访问记录。v结构简单。v查找记录速度慢,必须按顺序进行。v读/写操作不能同时进行。随机文件 随机文件中的每条记录的长度相同,每条记录都有惟一的一个记录号(索引)。特点:v可以同时进行读/写操作。v可直接定位到某条记录,查找记录较为迅速。v不能直接查看文件中的内容。二进制文件 二进制文件是字节的集合
3、,以字节为单位进行读写操作,它没有随机文件那样严格的文件结构。特点:v灵活性大,占空间小。v不能直接查看文件中的内容。9.1.2 9.1.2 文件的打开与关闭文件的打开与关闭文件操作步骤 v打开或新建文件 如果文件已经存在,则打开该文件;如果不存在,则新建一个文件v读/写操作v关闭文件 Open语句 一般格式为: Open 文件名 For 模式 Access 存取类型 锁定 As #文件号 Len=reclength 功能:按指定的方式打开一个文件,并为该文件指定一个文件号。 说明: (1) 打开文件后,自动产生一个指向文件读写位置的文件指针。 (2) 文件名是一个字符串表达式,用于指定文件名
4、,该文件名可以包含路径。 (3) 模式:指定文件打开的模式,共有5种. v Input:以读方式打开顺序文件,从顺序文件中输入(读)数据到内存。文件不存在时会出错。vOutput:以写方式打开顺序文件,将内存中的数据输出(写)到顺序文件中。若文件已存在,则在打开该文件的同时删除文件中的全部数据;否则新建一个文件。vAppend:以追加方式打开顺序文件,打开文件后,文件指针位于文件的末尾。若文件已存在,则打开该文件并在其尾部追加数据;若文件不存在,则新建一个文件,相当于以Output方式打开文件。vRandom:以随机文件方式打开文件,可省略。vBinary:以二进制文件方式打开文件。(4) A
5、ccess存取类型 用于指定打开的文件可以进行的操作。存取类型包括:vRead:打开只读文件。vWrite:打开只写文件。vRead Write:打开读/写文件。(5) 文件号 用于指定一个文件号,范围是1到511之间的整数,读写文件时用文件号代替文件名。可使用 FreeFile 函数得到下一个可用的文件号。 例: Open d:data.txt For Random As #1 表示以随机方式打开d盘根目录下的data.txt文件,文件号为1。 Close语句 一般格式为: Close #文件号1,#文件号2 功能: 用来关闭打开的文件。 说明: 若在Close语句中没有指定文件号,则关闭所
6、有已打开的文件。小结v在进行读/写操作之前都必须先打开文件。v若由文件名指定的文件不存在,在使用Append、Binary、Output、或Random模式打开文件时,可新建一个文件。v若模式是Binary方式,则Len子句会被忽略掉。v使用Open语句时,如果在代码中没有使用绝对路径指定文件的存储位置,则需要将工程文件与数据文件保存在同一目录中,否则读操作会提示“文件未找到”的错误。9.2 顺序文件 顺序文件的读操作 vInput语句 一般格式为: Input #文件号,变量列表 功能:用于读取顺序文件中的数据,并保存在变量列表中。【例9.1】将磁盘文件in1.txt中的20个整数,读入到一
7、维数组Arr中,找到并输出其中的最大值和最小值。分析:文件in1.txt应与工程文件存放在同一目录下,或者在Open语句的文件名中指定绝对路径。下面的代码只列出文件操作部分!例9.1Dim Arr(1 To 20) As Integer Private Sub Command1_Click() Dim i As Integer Open in1.txt For Input As #1 For i = 1 To 20 Input #1, Arr(i) 从文件中读取数据存入数组从文件中读取数据存入数组 Next For i = 1 To 20 Text1.Text = Text1.Text &am
8、p; Arr(i) & Space(1) If i Mod 4 = 0 Then Text1.Text = Text1 & vbCrLf NextEnd SubvLine Input语句 一般格式:Line Input #文件号,字符串型变量 功能:从已打开的顺序文件中读出一行信息并赋给字符串变量。【例9.2】使用Line Input语句读取磁盘文件in2.txt中的数据,并显示在文本框中。程序代码如下:例9.2Dim Arr(1 To 20) As Integer Private Sub Command1_Click() Dim i As Integer Open in1.t
9、xt For Input As #1 For i = 1 To 20 Input #1, Arr(i) 从文件中读取数据存入数组从文件中读取数据存入数组 Next For i = 1 To 20 Text1.Text = Text1.Text & Arr(i) & Space(1) If i Mod 4 = 0 Then Text1.Text = Text1 & vbCrLf NextEnd Subv Input 函数 一般格式为:Input(字符数, #文件号) 功能:从指定文件的当前位置读取指定个数的字符。 说明:返回所读出的所有字符,包括回车符、空格、换行符等。【
10、例9.3】使用Input函数读取例9.2中使用的in2.txt文件,并输出在窗体上。例9.3Private Sub Form_Activate() Dim x As String Me.FontName = 隶书隶书 Me.FontSize = 14 Open in2.txt For Input As #1 Do While Not EOF(1) x = Input(1, #1) If x Chr(13) Then Print x; 可改为可改为Chr(10) Loop Close #1End Sub顺序文件的写操作 以Output或Append模式打开顺序文件,并使用Write #语句或Pr
11、int #语句写入数据。vWrite #语句 一般格式为:Write #文件号,输出列表 功能:将输出列表中的数据写入指定的顺序文件。 说明: (1) 输出列表可以是常量、变量和表达式,各输出项之间用逗号隔开;若省略,则输出一个空行。 (2) 写入文件中的数据之间自动加逗号,并在字符串两边加双引号。 (3) 所有数据写完后,在最后加一个回车换行符。【例9.4】使用Write #语句将10-99以内的所有素数输出到Out.txt文件中。程序代码如下:例9.4Private Sub Form_Load() Dim flag As Boolean 标志变量,为True时表示当前数为素数 Open o
12、ut.txt For Output As #1 For i = 11 To 99 flag = True For j = 2 To Sqr(i) If i Mod j = 0 Then flag = False:Exit For End If Next If flag Then Write #1, i 当前数为素数,输出到Out.txt中 Next Close #1 MsgBox 已经将数据写入文件,请查阅。, vbInformation + _ vbOKOnly, 提示 EndEnd Sub【例9.5】在例9.4所生成的Out.txt文件中追加写入1-20之间的偶数。分析:追加数据使用App
13、end模式。程序代码如下:Private Sub Form_Load() Dim i As Integer Open out.txt For Append As #1 追加写入数据 For i = 1 To 10 Write #1, 2 * i 将偶数追加写入到Out.txt中 Next Close #1 MsgBox 已经将偶数追加写入文件中,请查阅。, _ vbInformation + vbOKOnly, 提示 EndEnd Sub例9.5v Print #语句 一般格式为:Print #文件号,输出列表 功能:将输出列表中的数据写入指定的顺序文件。 说明:可使用“,”或“;”来控制输出
14、格式。【例9.6】比较Print #语句和Write #语句在顺序文件中的输出结果。Private Sub Form_Load() Open out1.txt For Output As #1 Print #1, 张三张三, 男男, 20 Print #1, 张三张三; 男男; 20 Write #1, 张三张三, 男男, 20 Close #1 MsgBox 数据已经写入文件!数据已经写入文件! EndEnd Sub例9.6与读/写操作有关的函数 v EOF函数 一般格式为:EOF(文件号) 功能:测试是否到达文件尾。 说明:若已经到达文件尾,则返回True,否则返回False。v LOF函
15、数 一般格式为:LOF(文件号) 功能:返回文件的长度,以字节为单位。 说明:若返回值为0,表示空文件。vFreeFile函数 一般格式为:FreeFile(文件号范围) 功能:返回下一个可供Open语句使用的文件号。 说明:该函数的返回值是1-511之间的整数。v Seek函数 一般格式为:Seek(文件号) 功能:返回由文件号指定的文件中待读/写的位置。 说明:该函数主要用于随机文件,返回已读/写记录的下一条记录的记录号。9.3 9.3 随机文件随机文件 随机文件中每条记录的长度都相同,各记录中对应字段的类型也必须相同。每条记录都有一个记录号,根据记录号就可以任意地读/写数据。 为了准确地
16、读/写记录中的数据,通常在对文件操作之前,先定义一种用户自定义类型,称为记录类型。随机文件操作的一般步骤如下:(1) 定义记录类型并声明该类型的变量。(2) 在Open语句中使用Random模式打开随机文件。(3) 使用Get #语句从文件中读取记录;使用Put #语句将记录写入文件。(4) 关闭随机文件。定义记录类型的一般格式为:Public | Private Type 记录类型名 字段名1 As 类型字段名2 As 类型 字段名n As 类型End Type说明:v记录类型名的命名规则与变量相同。若使用记录类型的变量,用Dim语句声明记录类型的变量。v每个字段名是记录类型的一个成员,可是
17、基本数据类型,也可是记录类型,若是字符串,必须定长。v记录类型必须定义在通用声明段,通常定义在标准模块中,默认为Public。如果定义在窗体模块中,必须用Private关键字加以限定。随机文件的读操作 使用Get #语句,一般格式为: Get #文件号,记录号,变量 功能:从随机文件中读取记录号所对应的记录到变量中。 说明:记录号指出读取的是第几条记录,如果省略,表示读取指针指向的当前记录。随机文件的写操作 使用Put #语句,一般格式为: Put #文件号,记录号,变量 功能:将变量中的数据写入随机文件由记录号对应的记录中。 说明:记录号指出写入到第几条记录,如果缺省,表示写入到指针指向的当
18、前记录。 注意:在Get #和Put #语句中,记录号省略时,其后的分隔符逗号不能省略。例如:Get #1,5,x 将随机文件(文件号为1)中第5条记录读入到变量x中Put #2, 7, y 将变量y中的数据写入到随机文件(文件号为2)中的第7条记录中Put #2, , y 将变量y中的数据写入到随机文件(文件号为2)中的第8条记录中【例9.7】建立一个随机文件,其中包含3名学生的3门课程的成绩,下表所示。使用Put #语句写入3名学生的成绩,然后用Get #语句按输入的相反顺序读出3名学生的成绩并输出。分析:定义一个记录类型:Stu_Sco,它包含3个成员:Chi、Mat和Eng,分别表示3
19、门课程的成绩;声明一个Stu_Sco类型的变量ss,用于存放记录数据。记录号语文数学英语1988765288928931006576例9.7Dim ss As Stu_ScoPrivate Sub Form_Activate() Caption = 随机文件的写入与读取 Print 记录号, 语文, 数学, 英语 Open Score.dat For Random As #1 Len = Len(ss) For i = 1 To 3 ss.Chi = Val(InputBox(请输入第 & i & 个学生的语文成绩:, 输入成绩) ss.Mat = Val(InputBox(请
20、输入第 & i & 个学生的数学成绩:, 输入成绩) ss.Eng = Val(InputBox(请输入第 & i & 个学生的英语成绩:, 输入成绩) Put #1, i, ss 写入记录 NextPrivate Type Stu_Sco Chi As Integer Mat As Integer Eng As IntegerEnd Type程序代码如下:For i = 3 To 1 Step -1 读出记录并显示在窗体上 Get #1, i, ss Print i, ss.Chi, ss.Mat, ss.Eng Next Close #1End Sub9.4
21、 9.4 二进制文件二进制文件 可以将二进制文件看成长度为1的随机文件。 同样可以使用Get #和Put #语句对文件进行任意读/写。与随机文件不同的是,二进制文件的读/写单位为字节,而随机文件的读/写单位为记录。对二进制文件进行读/写时,需在Open语句中指定Binary模式。二进制文件的读操作 一般格式为:Get #文件号,位置,变量 功能:将二进制文件中的数据读入到变量中。 说明:位置表示读取的起始字节位置,文件中的第1个字节位于位置1,第2个字节位于位置2,以此类推。二进制文件的写操作 一般格式为:Put #文件号,位置,变量 功能:将变量中的数据写入二进制文件。 说明:位置表示写入数
22、据的字节位置,将变量中长度为Len(变量)个字节的数据写入到二进制文件中指定的位置。如果省略,表示写入到指针指向的当前位置。【例9.8】 将两个字符串“你好,”“北京。”分别在位置10和40处用Put #语句写入数据文件“file1.dat”,用Get #语句读出数据并显示在窗体上。程序代码如下:例9.8Private Sub Form_Activate() Dim str1 As String * 8, str2 As String * 8 Dim s1 As String * 8, s2 As String * 8 str1 = 你好, str2 = 北京。 Open file1.dat
23、For Binary As #1 Put #1, 10, str1 Put #1, 40, str2 MsgBox 数据已经写入指定文件! Get #1, 10, s1 Get #1, 40, s2 Print s1; s2 Close #1End Sub9.5 9.5 文件的基本操作文件的基本操作常用的文件、文件夹操作语句如下。CurDir语句 一般格式为:CurDir 驱动器 功能:返回一个字符串,表示某驱动器的当前路径。 说明:驱动器是一个字符串表达式,若省略该参数,则返回当前驱动器的路径。默认情况下,Visual Basic的安装路径就是当前工程所在的路径。Private Sub Fo
24、rm_Activate() Print CurDir Print CurDir(d)End SubChDrive语句 一般格式为:ChDrive 驱动器 功能:改变当前驱动器。 说明:驱动器是一个字符串表达式,它指定一个存在的驱动器;如果使用空串 (),则当前的驱动器将不会改变;如果驱动器参数中有多个字母,则ChDrive只会使用首字母。例如:ChDrive D 改变当前驱动器为D盘ChDrive ED 改变当前驱动器为E盘MkDir语句 一般格式为:MkDir 路径名 功能:创建一个新的目录(文件夹) 说明:路径名是一个字符串,可以包含驱动器符,如果不包含驱动器符,则在当前驱动器下建立一个新
25、的目录。 注意:在指定路径下建立的目录必须是惟一的,否则会提示“路径/文件访问错误”。例如: MkDir D:ProjectChDir语句 一般格式为:ChDir 路径名 功能:更改当前目录 说明:路径名是一个字符串表达式,它把指定的目录设置为默认目录。例如: ChDir mypath RmDir语句 一般格式为:RmDir 路径名 功能:删除一个已经存在的目录 说明:路径名是一个字符串表达式,用来指定要删除的目录,路径名可以包含驱动器,如果没有指定驱动器,则RmDir删除当前驱动器上指定的目录。例如:RmDir C:mypath FileCopy语句 一般格式为:FileCopy 源文件名,
26、 目标文件名 功能:将源文件复制到目标文件 说明:其中源文件名、目标文件名均为一个字符串表达式,均可包含路径,分别表示复制操作的源文件和目标文件。 注意:使用FileCopy语句时源文件不能打开,否则会产生错误。例如:FileCopy D:Projectin.txt, C:Projectout.txtKill语句 一般格式为:Kill 文件名 功能:从磁盘中删除指定的文件 说明:文件名是字符串表达式,可以包含路径,其中可以使用通配符“*”和“?”。例如:Kill *.doc 注意:因为该语句可以删除文件,所以一定要慎用,以免带来不必要的损失。Name语句 一般格式为:Name 原路径名 As
27、新路径名 功能:重命名一个文件或目录 说明:原路径名是一个字符串表达式,表示已存在的文件名或目录名;新路径名是一个字符串表达式,表示新的文件名或目录名。【例9.9】在D盘根目录下创建一个文件夹Project,然后将C:WindowsSystem32目录下的calc.exe文件复制到新建的Project文件夹中,并改名为“计算器.exe”。程序代码如下:Private Sub Form_Load() MkDir D:Project FileCopy C:Windowssystem32calc.exe, _ D:Project计算器计算器.exe MsgBox 文件操作结束文件操作结束, vbInformation, 提示提示 EndEnd Sub例9.99.6 9.6 文件系统控件文件系统控件 在VB中,用户可以使用3个文件系统控件,分别是DriveListBox、D
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 客户服务经理劳动合同模板3篇
- 劳动合同三方协议风险控制策略3篇
- 小区栏杆建设招标信息3篇
- 合同押金保证金协议3篇
- 廉洁协议范本3篇
- 建筑工程劳动合同加强版2篇
- 二手房买卖合同的贷款注意事项3篇
- 合同修正补充协议全解析3篇
- 土方挖掘工程分包合同书3篇
- 粮食仓储企业安全生产管理要求考核试卷
- 机器的征途:空天科技学习通超星期末考试答案章节答案2024年
- 康复心理学课件 变态心理学
- 钢结构工程加工合同范本
- 眼镜学智慧树知到答案2024年温州医科大学
- 2024至2030年中国碳化硅纤维增强复合材料行业深度调研及发展预测报告
- 水工维护中级工技能鉴定理论考试题库(含答案)
- GB/T 4706.2-2024家用和类似用途电器的安全第2部分:电熨斗的特殊要求
- 招标代理机构选取技术标投标方案(技术方案)
- 出租车公司安全管理手册
- DL-T5706-2014火力发电工程施工组织设计导则
- 一例重度子痫前期并发Hellp综合征患者的护理
评论
0/150
提交评论