1 / 52

第 7 章 文 件

第 7 章 文 件. 教学要求. 掌握文件管理控件的主要属性、事件和方法 ★ 掌握文件的基本概念 掌握文件的常用函数、语句 掌握 顺序文件的读、写操作 ★ 了解随机(记录)文件 了解二进制文件. 教学内容. 7.1 文件管理控件 7.2 文件处理 7.3 顺序文件 7.4 随机文件处理. 7.1 文件管理控件 VB 提供了驱动器列表框、目录列表框和文件列表框三个特殊的控件,将他们组合起来使用,可以创建与文件操作有关的界面。. 驱动器列表框 DriveListBox. 目录列表框 DirListBox.

zlhna
Download Presentation

第 7 章 文 件

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第 7 章 文 件

  2. 教学要求 • 掌握文件管理控件的主要属性、事件和方法★ • 掌握文件的基本概念 • 掌握文件的常用函数、语句 • 掌握 顺序文件的读、写操作★ • 了解随机(记录)文件 • 了解二进制文件 2

  3. 教学内容 • 7.1 文件管理控件 • 7.2 文件处理 • 7.3 顺序文件 • 7.4 随机文件处理 3

  4. 7.1 文件管理控件 VB 提供了驱动器列表框、目录列表框和文件列表框三个特殊的控件,将他们组合起来使用,可以创建与文件操作有关的界面。 驱动器列表框 DriveListBox 目录列表框 DirListBox 文件列表框 FileListBox 4

  5. 7.1.1 驱动器列表框(DriveListBox) [功能]: 一个下拉式列表框,显示当前系统的所有驱动器列表,顶端显示的是当前选定的驱动器。 [常用属性]: • Name:名称属性,缺省时该属性值为Drive1; • Drive:当前驱动器属性,该属性为运行态属性;可以用于返回在驱动器列表框中当前选取的驱动器号,也可用于指定在驱动器列表框顶端显示的驱动器; [常用事件]: • Change:当用户在驱动器列表框中选择一个驱动器,或在列表框顶端输入一个驱动器标识,或通过赋值语句修改了驱动器列表框的Drive属性都会激活该事件。 一般在此事件中,用drive属性更新目录列表框的path属性,保持驱动器列表框和目录列表框的同步变化。 5

  6. [常用语句]: 格式:ChDrive Drive 功能:改变当前工作驱动器——对文件进行存取操作时的缺省驱动器。 说明:Drive参数是字符型,必须为系统有效的驱动器名。 [例如]:ChDrive “D:” 注意:该语句的执行与驱动器列表框无关,既不会改变列表框的drive属性,列表框顶端的显示,也不会引发驱动器列表框的Change事件。 同样,在驱动器列表框中选定某驱动器,并不能直接将其变更为当前工作驱动器,必须使用如下语句: ChDrive drive1.drive 6

  7. 7.1.2 目录列表框( DirListBox ) [功能]:显示系统当前驱动器的目录结构,并突出显示当前目录。显示从根目录开始,到当前目录这条路径上的所有目录,以及当前目录的下属所有第一级子目录。 -4 -3 -2 -1 0 1 [目录索引]: 当前突出显示的目录,索引值为-1,紧邻其上的目录为-2,再上一层为-3,依次类推;而当前工作目录的第一个子目录的索引值为0,其他子目录的索引值顺次递增。 7

  8. [常用属性]: • Name:名称属性,缺省时为Dir1; • Path:设置和返回目录列表框中的当前目录,为运行态属性;可以通过如下两种方式设置:一是赋值语句;二是双击目录列表框中某项。 注意:一般目录列表框中显示当前驱动器上的目录,即目录列表框与驱动器列表框必须同步,必须使用如下语句: <目录列表框>.path=<驱动器列表框>.drive 此语句通常在驱动器列表框的Change 事件中执行。 例如: Private Sub Drive1_change() Dir1.path=Drive1.drive End Sub 8

  9. [常用事件] Change: 当用户双击目录列表框中的目录项,或通过赋值语句改变了目录列表框的Path属性,都会引发该事件。 一般在此事件中,用path属性更新文件列表框的path属性,保持文件列表框和目录列表框的同步变化。 [常用语句]: 格式:ChDir Path 功能:改变系统当前工作目录。 说明: (1) ChDir语句改变的是当前驱动器(或指定驱动器)的工作目录,而不能改变工作驱动器; (2)该语句与目录列表框无关,即不会改变目录列表框的当前目录,也不会触发Change事件。 同样,在目录列表框中选定某目录,并不能将其变更为当前工作目录,必须使用如下语句: ChDir dir1.Path 9

  10. 7.1.3 文件列表框( FileListBox ) [功能]:显示系统当前目录下的文件列表。 [常用属性]: • Name:名称属性,缺省时为File1; • Path:设置和返回文件列表中所显示文件的路径,为运行态属性 注意:一般文件列表框中显示当前目录之中的文件,即文件列表框与目录列表框必须同步,必须使用如下语句: <文件列表框>.path=<目录列表框>.path 此语句通常在目录列表框的Change 事件中执行。 例如: Private Sub dir1_change() file11.path=dir1.path End Sub 10

  11. Pattern:文件种类,设置文件列表框显示文件的种类, 缺省为*.* • 例:File1.Pattern=“*.txt ; *.frm” • FileName:设置和返回文件列表框中将显示的文件名称,为运行态属性; 例:File1.fileName=“d:\*.frm” • ListCount:返回文件(组合框、驱动器、目录)列表框中的所列项目的总数,为运行态属性; • ListIndex:设置或返回当前控件上所选择项目的“索引值”,为运行态属性,列表框中的第一项为0,第二项为1,依次类推,若文件列表框中一项也没有选定,则返回-1; • dir1.listindex = -2 • drive1.listindex = 2 11

  12. [常用事件] • PathChange: Path属性改变时引发该事件; 注意:在程序中,给文件列表框的Filename属性赋值,也会自动改变它的Path属性,触发本事件。 file1.filename=“c:\config.sys” • PatternChange: Pattern属性改变时引发该事件; • Click:单击事件。 12

  13. [文件属性]:——指定在文件列表框中显示某类属性的文件[文件属性]:——指定在文件列表框中显示某类属性的文件 • ReadOnly:只读属性,缺省值True; • Hidden:隐含属性,缺省值False ; • System:系统属性,缺省值False; • Archive:存档属性,缺省值True ; • Normal:通常属性,缺省值True; 说明:当Normal属性为True 时,System 、Hidden 文件不显示;当Normal属性为False 时, 文件类型置为True的可显示。 file1.normal=false file1.system=true 13

  14. 7.1.4 组合使用文件管理控件 为使文件管理控件协调工作,关键点是使驱动器、目录、文件列表框同步,通过下述两个事件过程实现: ——保证目录列表框与驱动器列表框同步更新。 ——保证文件列表框与目录列表框同步更新。 Private Sub drive1_change() dir1.path=drive1.drive End Sub 来看个例子吧[例7-2]。 Private Sub dir1_change() file11.path=dir1. path End Sub 14

  15. P134 例:文件控件的组合使用。 • Private Sub Drive1_Change() • Dir1.Path = Drive1.Drive • End Sub • Private Sub Dir1_Change() • File1.Path = Dir1.Path • File1.Pattern = "*.wmf" • End Sub • Private Sub File1_Click() • Dim name As String • If Right(File1.Path, 1) <> "\" Then • name = File1.Path & "\" & File1.FileName • Else • name = File1.Path & File1.FileName • End If • Picture1.Picture = LoadPicture( name ) • End Sub

  16. 7.2 文件处理 • 文件: 所谓文件,是一组相关信息的集合,是存放在磁盘上一系列相关的字节. • 文件访问类型: • 顺序访问:从文件头开始,依次访问其中数据,适用于文本文件; • 随机访问:适用于以记录形式保存的二进制文件,可以存取任意指定位置的记录; • 二进制访问:适用于任意二进制文件 , 以字节为单位存取数据。 16

  17. 文件操作的一般步骤: • 首先将文件“打开”,即将相关信息加载进内存,建立文件与内存中某个文件缓冲区的关联; • 文件“存/取”操作; • 最后“关闭”文件,即释放文件所占用的文件缓冲区。 文件操作 17

  18. 7.2.2文件访问的语句和函数 P136 表7-2 18

  19. 1.打开文件 —— Open语句 • 对文件进行操作之前,必须用Open语句打开或建立一个文件 • [功能]: • 为文件的输入输出分配缓冲区,指定文件的存取类型(模式)和存取方式,定义与文件相关联的文件号。 • [格式]: • Open 文件名 [FOR 模式] [Access 存取类型] [锁定] AS [#]文件号 [Len=记录长度] • [说明]: • 格式中的Open、 FOR、 Access、AS、Len为关键字 • 文件名(Filename): • 文件的名字,可用字符串或字符型变量表示。可以包括盘符和路径。 • 3) 模式(mode): 19

  20. 说明访问文件的方式: OutPut 设定为顺序输出模式 InPut 设定为顺序输入模式 Append 设定为添加模式,与OutPut方式不同, 以Append方式打开顺序文件时,文件指 针定位在文件末尾,写入的数据添加到 原来文件的后面。 Random 设定为随机访问的模式 Binary 设定为二进制访问模式 如果缺省FOR子句,将以随机访问模式Random打开文件。 20

  21. 磁盘文件 磁盘文件 输出 数据 输入 数据 程序 写文件方式: Output Append 读文件方式: Input 21

  22. 4) 存取类型(Access) 用来指定访问文件的类型。可以是: Read 对打开的文件只能进行读操作 Write 对打开的文件只能进行写操作 Read Write 对打开的文件可读可写 • 5) 文件号(Fileno) • 取值范围在1~511范围之内。执行Open语句时,文件与分配给定的文件号相关联。 • 6) 记录长度(Reclength) • 是一个整型表达式,其值≤32767。 • 对顺序文件,用该参数设定缓冲区的大小。 • 不指定,缓冲区的缺省值为512个字节。 22

  23. 注意: 1) 如果以Output、Append、Random和Binary模式打开一个不存在的文件,Visual Basic会创建一个相应的文件。 2) 在Input、Random和Binary模式下,可用不同的文件号打开同一个文件。但以Output和Append模式打开的文件在关闭之前不能用不同的文件号重复地打开它。 3) 所有当前使用的文件号必须是唯一的。即当前使用的文件号不能再分配给其他文件。 4) 如果以Output模式打开一个已存在的顺序文件,则该文件中原来数据将被覆盖。 23

  24. 举 例 P138 1) Open "Exam" FOR Output AS #5 如果文件“Exam”不存在,则建立一个新文件,可以将数据写入到文件中去。如果文件“Exam”已存在,则该语句打开已存在的文件,新写入的数据将覆盖原来的数据。 2) Open "Exam" FOR Append AS #5 如果文件“Exam”不存在,则建立一个新文件,否则打开已存在的名为“Exam”的文件,新写入的数据添加到文件的后面,原来的数据仍然存在。 3) Open "Exam" FOR Input AS #5 打开已存在的名为Exam的文件,可从中读出数据。如果文件“Exam”不存在将产生“File Not Found”错误。 24

  25. 2、关闭文件 [格式]:Close [[#]<文件号>] [功能]:关闭指定的文件号对应的文件。 释放相应缓冲区和与该文件相联系的文件号。 • [说明]: • (1)该语句适用于任何文件; • (2)语句中可以包含多个文件号,文件号之间用逗号分隔 • (3)若语句中缺省文件号参数,则关闭所有用Open语句打开的文件; • (4)当应用程序结束时,会自动关闭所有文件。 • 例1:Close #1,#2 • 例2:Close 25

  26. 3、关闭所有文件——Reset语句 [格式]:Reset [功能]:关闭所有用Open语句打开的文件。 [说明]:适用于任何文件。 26

  27. 相关函数和语句 Eof(文件号) ★ 当文件指针到达文件结束标志时返回True,否则返回False。 FreeFile[(文件号范围)] ★ 返回Open语句可以使用的下一个有效文件号 LOF(文件号) ★ 返回已用Open语句打开的文件的字节数(文件长度) P140 28

  28. 7.3 顺序文件 以顺序方式存取的文件称为顺序文件,一般是文本文件; 特性: 每行数据长度可以不同; 增加数据时,只能添加到原有数据的最后; 查找数据时,必须从头开始顺序查找。 适用: 每行数据长度不确定时; 数据不经常做新增、修改和删除操作时; 处理数据是依次连续处理。 29

  29. 7.3.1 顺序文件的写操作 1、打开文件 [格式]:Open <文件名> For <Output/Append> As [#] <文件号> [功能]:用指定的文件号以顺序输出模式或添加模式打开文件。 [说明]: (1)文件名可以是字符串,包含路径; (2)若指定的文件不存在,系统将创建一个相应的文件; (3)以Output方式打开文件,文件中原有的数据被覆盖; (4)以Append方式打开文件,写入的数据将添加到原文件的尾部 (5)文件号的使用必须是唯一的,即当前已经占用的文件号不能再分配给其他文件使用;文件号的使用范围是1-511; (6)一个文件在用Output和Append方式打开后,不能再重复打开 30

  30. 错误在哪里? 例1:Open “D:\hb\Test.txt” For Output as #1 例2:Dim sFileName As String sFileName=“D:\hb\Test.txt” Open sFileName For Append As #100 例3:Open “File1” For OutPut As #9 Open “File2” For Output As #9 例4:Open “File1” For Append As #10  Open “File1” For Append As #11 以相同的文件号打开 两个不同的文件 在文件未关闭前 又重复打开 31

  31. 2、Print #语句 [格式]:Print <#文件号> ,[<输出列表>] [功能]:将输出列表中的语句写到顺序文件中。 [说明]:该语句和普通的Print语句的输出控制格式完全相同,也分紧凑和标准两种。 例1: Open “test.dat” for output as #10 print #10, 1 , 2 , 3 print #10,”We”,”study”,”VB6.0” Close 10 执行上述程序后,文件test.dat中的数据如下 • 2 3 • We study VB6.0 32

  32. 例2: Open “test.dat” for output as #10 Print #10 , 1;2;3 Print #10 , ”We”;”study”;”VB6.0” Close 10 执行上述程序后,文件test.dat中的数据如下: 1 2 3 WestudyVB6.0 提示: 为了避免以紧凑格式输出的各字符串难以明显区分,可以人为加上逗号间隔: 例如: print #10,”We”;”,” ; ”study”;”,”; ”VB6.0” 上述语句的执行结果为:We ,study ,VB6.0 33

  33. Private Sub Command1_Click() Dim i As Integer, a(10) As Integer Open "d:\test.txt" For Output As #1 For i = 1 To 10 a(i) = Int(Rnd * 100) + 100 Print a(i); Print #1, a(i); Next i Print Print #1, Close #1 End Sub 34

  34. 3 Write语句 [格式]:Write <#文件号>,[<输出列表>] [功能]:将输出列表中的语句写到顺序文件中。 [说明]:Write语句和Print语句的功能基本相同,它们之间的差别主要在: (1)Write语句写入的数据按照紧凑格式存放,各数据项之间自动插入逗号作为分隔符; (2)Write语句写入的字符串数据自动加上双引号作为限界符。 例: OPEN “TEST.DAT” for output as # 12 Write #12 ,1 ,-2 ,3 ,”ABC” Write #12 Write #12, 5,6,7,”DEF”, Write #12 Close #12 上述程序执行后, TEST.DAT文件中的数据为: 1,-2,3,”ABC” 5,6,7,”DEF” 35

  35. Private Sub Command2_Click() Dim i As Integer, a(10) As Integer Open "d:\test.txt" For Output As #1 For i = 1 To 10 a(i) = Int(Rnd * 100) + 100 Print a(i); Write #1, a(i), Next i Print Write #1, Close #1 End Sub 36

  36. 7.3.2 顺序文件的读操作 当一个文件存在时,可以对它进行读操作。读操作分为两种,一种是一个数据一个数据地读,另一种是一行数据一行数据地读。 1、打开文件 [格式]:Open <文件名> For Input As <#文件号> [功能]:用指定的文件号以顺序输入模式打开文件。 [说明]:以Input方式打开的文件,只能进行读操作。 37

  37. 2、Input 语句 [格式]:Input <#文件号> [,变量表] [功能]:从一个打开的顺序文件中读取数据,并将它们赋值给相应的变量。 [说明]: (1)变量表可以包含简单变量和数组元素,变量之间用逗号间隔,变量类型必须与文件中的数据项的类型一致; (2)从顺序文件中读数据时,要从头开始,依次读出,若数据类型和变量类型不一致,则赋一个初值给对应的变量; (3)从顺序文件读数据时,忽略前导空格、回车符、换行符; (4)读取数值型数据时,以其后的第一个空格或逗号或回车换行符作为结束; (5)读取字符型数据时,以第一个不在双引号里的逗号或回车换行符作为结束; (6)逻辑型和日期型数据以#号作为起始符和结束符,要求大写; 38

  38. 举 例 Test.txt 中数据:34 45 78 789 Dim A As Integer,B AS Integer,C As Integer Dim St As String Input #2 ,A,B,C,St A=34,B=45,C=78,St=“789” 39

  39. 例:文件test.dat中数据如下: This is File Test.dat,-2365,4893,#True# 要求按下面的格式输出在窗体上: This is File Test.dat -2365 4893 True Private sub form_click() Dim x as integer,y a integer,logic as boolean Dim filenumber as integer,chr as string Filenumber=freefile Open “Test.dat” for input as #filenumber Input #filenumber.chr Input #filenumber,x,y,logic Print char Print x,y,logic End sub 程序代码如左 40

  40. 3、Line Input语句 [格式]:Line Input <#文件号>,<变量名> [功能]:将顺序文件以行为单位读出并赋值给一个变量。 [说明]: (1)变量为字符型变量,或字符型数组元素,或变体型变量; (2)将数据行中除回车符和换行符以外的所有字符都赋值给相应的变量。 41

  41. 例:将c盘根目录下的config.sys文件的内容 显示在文本框中. Private Sub Form_Click() Dim line as String,filenumber as integer,str as string filename=freefile Open “c:\config.sys” For Input As #filenumber Do While Not EOF(filenumber) Line Input #1, line str=str+line+chr(13)+chr(10) Loop Close #filenumber text1.text=str End Sub 42

  42. 4、 Input函数 [格式]:Input(<字符个数>,<#文件号>) [功能]:从指定的文件中读取指定个数的字符(含空格 及各类符号)。 例:s=Input(10,#2) 43

  43. 顺序文件的应用 顺序文件的应用体现在两方面:(1)从文件中读取原始数据并提供给程序处理:(2)将程序处理结果存放到文件中。 例:数据文件Test1.Txt有10个同学的成绩,格式如下: 学号,英语成绩,数学成绩,计算机成绩,化学成绩 要求:统计每个学生的不及格门数,并将不及格门数超过1门(>1)的学生学号和不及格门数写入到文件Test2.Txt中。 [程序]: 读取原始数据: Dim a(10, 5) As Integer Open "d:test1.txt" For Input As #1 For i = 1 To 10 For j = 1 To 5 Input #1, a(i, j) Next j Next i 45

  44. 统计不及格门数并写入目标文件 Open "d:\test2.txt" For Output As #2 For i = 1 To 10 s = 0 For j = 2 To 5 If a(i, j) < 60 Then s = s + 1 Next j If s > 1 Then Write #2, a(i, 1), s Print a(i, 1), s End If Next I Close 46

  45. 7.4 随机文件处理 以随机方式存取的文件称为随机文件,也称记录文件,由一组长度相等的记录组成,一般用于数据库文件,具有以下几个特点: (1)记录定长; (2)若记录为单字段,则可对应与任何一个VB的标准类型;若记录为多字段,则必须由用户进行自定义; (3)随机文件的访问,可根据记录号随机访问任何一个记录。 47

  46. [格式]:Open <文件名> [For Random] As [#]<文件号> Len=<记录长度>[功能]:打开一个随机文件。[说明]:(1)Random为文件的缺省访问模式,可省略;(2)Len为指定的记录长度,不能比实际写入的数据短,否则会出错 7.4.2 随机文件的打开 48

  47. 7.4.1 变量声明 在处理随机文件之前,必须先声明处理文件数据的变量; 1、定义记录类型 如果需要打开或创建的随机文件的记录是多字段的,必须在模块中预先自定义一个类型。 [格式]:Type <类型名> <字段名1> As <数据类型> <字段名2> As <数据类型>    <字段名n> As <数据类型> End Type [说明]: (1)数据类型为VB的标准数据类型; (2)若字段为字符型,则通常定义为定长字符串; (3)类型名和变量名的命名规则相同。 49

  48. 例:Type Student_Score Name As String*8 Student_Id As String*7 English As Integer Math As Integer Computer As Integer End Type 2、声明变量 在具体进行随机文件的读写操作时,还必须以定义的类型声明一些变量。 例:Dim Stu_Score1 As Student_Score 50

  49. 7.4.3 随机文件的写操作 [格式]:Put #<文件号> ,[<记录号>],变量 [功能]:将变量的值写入到随机文件中。 [说明]: (1)记录号可省略,省略时将数据写入到当前文件指针处; (2)执行过一次Put操作,文件指针自动下移一个记录。 51

  50. Type aa name As String * 8 Money As Integer End Type Private Sub Command1_Click() Dim nFileNum As Integer Dim RecLen As Integer, i As Integer RecLen = Len(Person) Open "d:\t3.txt" For Random As #1 Len = RecLen For i = 1 To 3 Person.name = InputBox("输入姓名") Person.Money = InputBox("输入工资") Put #1, , Person Next i Person.name = "China" Person.Money = 1000 Seek #1, 3 Put #1, , Person Close #1 End Sub 窗体模块(通用)中 Dim Person As aa 记录号 指定 记录号 52

More Related