Presentation is loading. Please wait.

Presentation is loading. Please wait.

第7章 文 件 7.1 文件的概述 7.2 顺序文件的读写操作 7.3 通用对话框 7.4 文件系统控件.

Similar presentations


Presentation on theme: "第7章 文 件 7.1 文件的概述 7.2 顺序文件的读写操作 7.3 通用对话框 7.4 文件系统控件."— Presentation transcript:

1 第7章 文 件 7.1 文件的概述 7.2 顺序文件的读写操作 7.3 通用对话框 7.4 文件系统控件

2 7.1 文件的概述 文件的概念 将需要保留的信息以文件的形式存放在磁盘上 存储在外部介质(如磁盘)上的数据的集合

3 文件的分类 按存储内容 程序文件、数据文件 按组织形式 文本文件、二进制文件

4 需转换,费时间、空间,但可直接键盘输入或屏幕显示
文本文件 以字符的ASCII码形式存储 以整型数据1234为例 “1” “2” “3” “4” 文件中顺序存放字符“1”、“2”、“3”、“4”的ASCII 码值 需转换,费时间、空间,但可直接键盘输入或屏幕显示 每个字符占1字节,共需4字节

5 无转换,省时间、空间,但不可直接键盘输入或屏幕显示
二进制文件 数据的存储方式与其在内存中的存储形式完全相同 以整型数据1234为例 无转换,省时间、空间,但不可直接键盘输入或屏幕显示 占用2个字节

6 记录的概念 例:记录学生相关信息 一组相互关联的数据项集合
一名学生信息由:学号、姓名和成绩3项数据构成,称为1条记录;该记录反映此学生的具体信息; 学号、姓名和成绩是构成记录的基本数据项,称为字段或域; 将50个记录(即50名学生的信息)存放在一个文件中,则该文件就是一有关学生信息的数据文件;

7 文件的访问模式 顺序访问 — 适用于数据连续存放的文 本文件; 随机访问 — 适用于记录长度固定的文 本文件或二进制文件;
顺序访问 — 适用于数据连续存放的文 本文件; 随机访问 — 适用于记录长度固定的文 本文件或二进制文件; 二进制访问 — 适用于任意结构的文件。

8 7.2 顺序文件的读写操作 写操作: 读操作: 顺序文件: 各数据按照写入的先后顺序依次排列 读写时必须从第1个记录开始顺次进行 数据 内存
7.2 顺序文件的读写操作 数据 内存 文件 写操作: 数据 内存 文件 读操作: 顺序文件: 各数据按照写入的先后顺序依次排列 读写时必须从第1个记录开始顺次进行

9 【例7.1】向顺序文件中写入数据。用户在文本框中输入长度不超过20的字符串后,单击“保存”按钮将字符串输出到文件a.dat中。
MaxLength = 20

10 程序代码 打开文件a.dat,准备写数据 Private Sub cmdSave_Click ()
Open "a.dat" For Output As #1 Print #1, txtInput.Text Close #1 MsgBox "保存完毕" End Sub 将文本框中的字符串输出到文件a.dat中 关闭a.dat文件

11 说明 界于1到511范围内 通过文件号实现对文件的读写操作 Input — 从文件中读出字符 同时打开多个文件时,应给每个文件指定
不同的文件号 Input — 从文件中读出字符 Output — 向文件中写入字符 Append — 在文件原有内容的尾部追加字符 对文件进行操作时,必需首先打开该文件 使用Open语句打开文件 Open 文件名 For 打开方式 As #文件号 文件所在路径及名称 为当前打开的文件指定编号 文件的操作类型

12 Open "a.dat" For Output As #1
使用Output方式打开文件时,若指定的文件不存在,Open语句将首先创建该文件,然后再打开它 以Output方式打开的文件,其原有内容全部丢失

13 例:Close #1 在完成读写操作之后必须及时将文件关闭,以避免数据丢失和破坏 使用Close语句关闭文件 Close [文件号]
关闭文件号为1的文件 终结文件与文件号之间的关联 文件号可再次分配给其他文件使用 省略则关闭所有已打开的文件

14 使用 Print # 语句将格式化数据写入顺序文件
使用Write # 语句向文件中写数据 在各数据间自动加入逗号 自动将字符型数据用双引号括起

15 程序运行结束后,系统在当前文件夹中建立了一个名为a.dat的顺序文件;
文件内容可以通过Windows中的记事本进行查看。

16 【例7.2】从顺序文件中读取数据。在例7.1的基础上添加显示功能。单击“显示”按钮后将已保存过的文件内容输出到标签中。
新加

17 从#1文件中读出一行字符赋给变量txtstr
程序代码 Private Sub cmdShow_Click () Open "a.dat" For Input As #1 Line Input #1, txtstr$ lblOutput.Caption = txtstr$ Close #1 End Sub 用“读”方式打开 从#1文件中读出一行字符赋给变量txtstr

18 说明 使用Input方式打开文件时,要求该文件必须已经存在,否则将产生文件错误 使用Line Input #语句从文件中读出一行数据

19 遇回车符(Chr$(13))、换行符 (Chr$(10))或文件结束符时结束一行的“读”操作;
读出字符序列中不包括回车或换行符; 再次执行Line Input #语句时,将从新的一行 开始读取; 通常情况下,Print #语句与Line Input #语句匹配使用。

20 Input #文件号, 变量列表 使用Input #语句以数据项为单位对文件进行读取
按照变量列表中所提供的变量个数及类型,从文件中依次读取相应数目的数据项并赋给各变量; 文件中各数据项的排列顺序及数据类型必须与变量列表中的各变量一一对应匹配; Input #语句常与Write #语句配合使用。

21 【例7.3】程序运行时在列表框中显示当前可使用的屏幕字体,当选择其中一项或多项后单击“保存”按钮,则将所选内容写入文件font.dat中。
MultiSelect = 2

22 程序代码 Private Sub Form_Load () For i = 0 To Screen.FontCount – 1
屏幕可用字体数量 屏幕对象 Private Sub Form_Load () For i = 0 To Screen.FontCount – 1 lstFont.AddItem Screen.Fonts(i) Next i End Sub 字符型数组,屏幕可用的所有字体名

23 Private Sub cmdSave_Click () Open "d:\font.dat" For Output As #1
文件名要完全,包括路径及扩展名 Private Sub cmdSave_Click () Open "d:\font.dat" For Output As #1 For i = 0 To lstFont.ListCount – 1 If lstFont.Selected(i) = True Then Print #1, lstFont.List(i) End If Next i Close #1 End Sub 循环写入多个数据 写操作结束 后系统自动在文 件尾加入文件 结束标志 把索引号为i的项目写入#1文件中

24 【例7. 4】在例7. 3的基础上添加复制并显示功能。单击“复制并显示”按钮,将例7. 3中生成的文件内容复制到文件fontcopy
【例7.4】在例7.3的基础上添加复制并显示功能。单击“复制并显示”按钮,将例7.3中生成的文件内容复制到文件fontcopy.dat中,同时将该文件中的内容显示在窗体右侧的文本框中。 没单击“保存”前此按钮不可用

25 判断1号文件是否已到文件尾;结束:True
“复制并显示”按钮的程序代码 文件号不同 为读而打开 Private Sub cmdCopy_Click () txtCopy.Text = "" Open "d:\font.dat" For Input As #1 Open "d:\fontcopy.dat" For Output As #2 Do While Not EOF(1) Line Input #1, temp$ Print #2, temp$ txtCopy.Text = txtCopy.Text & temp$ & Chr$(13) & Chr$(10) Loop 为写而打开 判断1号文件是否已到文件尾;结束:True

26 cmdCopy.Enabled = False End Sub
不带参数,关闭所有已打开的文件 Close cmdSave.Enabled = True cmdCopy.Enabled = False End Sub 也可改写成:Close #1, #2

27 7.3 通用对话框 通用对话框(Common Dialog Box)控件提供了包括打开和保存文件、设置打印选项、选择颜色和字体等在内的一组标准对话框,在运行 Windows 帮助引擎时,还能够显示应用程序的帮助。 缺省状态下工具箱中不包括,使用前需进行添加。

28 添加通用对话框控件 执行【工程】|【部件】命令 或 在工具箱中单击鼠标右键并选择快捷菜单中的【部件】命令 再次单击则取消

29 【例7.5】运行程序时,单击“浏览”按钮打开“选择图片文件”对话框,选择一个图片文件后单击“确定”按钮,将所选文件中的图片显示在图像框中。
Stretch = True

30 设置通用对话框 添加通用对话框(运行时不可见) 在控件上按鼠标右键 |【属性】 为对话框指定初始目录,缺省时使用当前目录
返回或设置所选文件的路径和文件名 对话框标题栏中所显示的内容

31 调用通用对话框dlgOpen的ShowOpen方法
程序代码 Private Sub cmdBrow_Click() dlgOpen.ShowOpen imgShow.Picture = LoadPicture(dlgOpen.FileName) End Sub 用户在对话框中所选的文件名

32 说明 通用对话框可以提供6种形式的对话框 程序运行时通过调用方法或设置Action属性来指定通用对话框的类型 通用对话框 . 方法名

33 方法名 对话框类型 Action属性值 ShowOpen 打开对话框 1 ShowSave 另存为对话框 2 ShowColor 颜色对话框 3 ShowFont 字体对话框 4 ShowPrinter 打印对话框 5 ShowHelp Windows帮助引擎 6

34 通用对话框的属性设置 保存文件时未指定扩展名,则自动为文件添加该扩展名 在对话框的文件列表框中所能显示的文件类型
指定缺省过滤器(第一个过滤器的索引是1) 设置对话框的选项

35 过滤器 ( Filter ) 设置格式:显示文本 | 通配符 设置多个过滤器时,应在各过滤器间使用管道符号“|”隔开 例:所有文件(*.*)|*.*|工程文件(*.vbp)| *.vbp|窗体文件(*.frm)|*.frm

36 标志 ( Flags ) 与“打开/另存为”选项卡有关的Flags参数 可以将Flags值设 置成表中多个参数的 和,此时对话框将
值同时满足各参数 的要求 Flags值 描述 2 保存一个同名文件时,询问是否覆盖原有文件 8 将对话框打开时的目录设置成当前目录 16 在对话框中显示帮助按钮 256 允许在文件名中使用非法字符 512 允许在文件名列表框中同时选择多个文件 8192 当文件不存在时,提示创建文件

37 【例7.6】运行程序时,单击“保存”按钮将用户在左侧文本框中输入的文本保存到指定的文件中;单击“读取”按钮,将用户在“打开”对话框中选择的文件内容显示在右侧的文本框中。

38 程序发生错误时自动跳转到 ErrHandler标号位置
单击取消按钮时出错 程序代码 Private Sub cmdSave_Click () dlgFile.CancelError = True On Error GoTo ErrHandler With dlgFile .DialogTitle = "保存文件" .FileName = "未命名.txt" .InitDir = "d:\cwz" .Filter = "所有文件[*.*]|*.*|文本文件 [*.txt]|*.txt|数据文件[*.dat]|*.dat" .DefaultExt = "txt" : .Action = 2 End With With语句 省对象名 对话框标题 设置通用对话框的属性 缺省文件名 缺省文件路径 过滤器 缺省文件后缀 等价于ShowSave

39 Open dlgFile.FileName For Output As #1
Print #1, txtInput.Text Close #1 Exit Sub ErrHandler: MsgBox "无效的操作" End Sub 保存文件,将文本框中的内容写入#1文件中 出错处理

40 Private Sub cmdRead_Click ()
dlgFile.CancelError = True On Error GoTo ErrHandler With dlgFile .DialogTitle = "打开文件" .InitDir = "d:\cwz" .Filter = "所有文件[*.*]|*.*|文本文件 [*.txt]|*.txt|数据文件[*.dat]|*.dat" .FilterIndex = : Action = 1 End With 等价于ShowOpen

41 If dlgFile.FileName <> "" Then
txtstr = "" Open dlgFile.FileName For Input As #1 Do While Not EOF(1) Line Input #1, filestr txtstr = txtstr & filestr & Chr(13) & Chr(10) Loop Close #1 : txtOutput.Text = txtstr End If Exit Sub ErrHandler: MsgBox "无效的操作" End Sub 人为加入回车、换行符,顺序不能颠倒 读取一行文本

42 通用对话框控件的CancelError属性
指定在对话框中选取“取消”按钮时是否按出错处理 False ( 缺省值 ) :不产生错误 True:产生cdlCancel(32755号)错误

43 使程序跳过产生错误的语句,继续执行下一条语句
On Error语句 程序发生运行错误时,通常情况下将导致程序中止并显示错误信息; 使用On Error语句为程序启动一个错误处理程序并指定其具体位置,使程序出错时不再产生中断,自动跳转执行该程序; On Error语句格式 On Error GoTo 标号 On Error Resume Next On Error 0 使程序转去执行标号处的出错处理程序 使程序跳过产生错误的语句,继续执行下一条语句 关闭当前过程中已启动的所有错误处理程序

44 使用标号时应注意的问题 On Error语句中指定的标号位置必须与On Error语句出现在同一过程中
用以标识出错处理程序开始位置的标号行可以是任何字符的组合(不区分大小写),但必须以字母开头、冒号“:”结尾,且从第一列开始输入。

45 设置通用对话框属性的方法 三种方式 在属性窗口中设置 在属性页对话框中设置 在代码中设置
有些属性只能在代码中使用(如Action属性 ),需谨慎对待 应在设置完其他全部属性后再设置Action属性或调用相应方法

46 With - End With 语句 对同一对象执行一系列语句时,通过使用With语句可不重复指定对象名 With语句的一般形式
语句组 End With 一条With语句只能设定一个对象 属性前的“.”不能省

47 【例7.7】使用字体和颜色对话框对标签中的文字进行设置。

48 程序分析 调用通用对话框的ShowFont方法可以打开字体对话框 调用通用对话框的ShowColor方法可以 打开颜色对话框

49 与“字体对话框”有关的常用属性 FontName — 字体名称 FontSize — 字体大小 Max、Min—字体最大、最小尺寸
必须先置Flags=8192 FontName — 字体名称 FontSize — 字体大小 Max、Min—字体最大、最小尺寸 FontBold、FontItalic — 是否粗体、斜体 FontStrikethru — 是否带删除线 FontUnderline — 是否带下划线 Color — 文本颜色 必须先置Flags=256

50 与“颜色对话框“有关的常用属性 Color — 用户选定的颜色 必须先置Flags=1

51 与“字体对话框”有关的Flags参数设置
描 述 1 对话框中列出系统支持的屏幕字体 2 对话框中列出打印机支持的字体 3 对话框中列出可用的打印机和屏幕字体 256 允许设置删除线、下划线以及颜色等效果 512 对话框中的“应用”按钮有效

52 与“颜色对话框”有关的Flags参数设置
描 述 1 设置初始颜色值 2 颜色对话框中包括自定义颜色窗口部分 4 颜色对话框中“规定自定义颜色”按钮无效 8 颜色对话框中显示“帮助”按钮

53 特别注意 使用ShowFont方法前,必须将通用对话框的Flags属性设置为1~3中的任一值与其他参数值的和(即必须规定对话框中所列字体的范围),否则将发生字体不存在的错误。

54 7.4 文件系统控件 如何在应用程序中显示磁盘驱动器、目录和文件的有关信息 (如:设计资源管理器)
7.4 文件系统控件 如何在应用程序中显示磁盘驱动器、目录和文件的有关信息 (如:设计资源管理器) 除通用对话框外,VB提供了文件系统控件: 驱动器列表框 目录列表框 文件列表框 标准控件

55 【例7.8】设计图片浏览器。运行程序时,选择文件类型、文件所在位置及文件名后,在图像框中显示该文件中的图像。
驱动器列表框 图像框 目录列表框 文件列表框 组合框

56 程序分析 由于是图片浏览器,应限制用户只能选择图形文件
通过组合框指定所要浏览的图片类型 文件列表框中只显示指定类型的文件 当用户改变驱动器或文件目录的设置后,应使驱动器列表框、目录列表框和文件列表框的显示内容保持一致(同步)

57 在文件列表框中只显示后缀为bmp的文件名
程序代码 Private Sub Form_Load () imgShow.Stretch = True cboFile.AddItem "位图文件(*.bmp)" cboFile.AddItem "图标文件(*.ico)" cboFile.AddItem "图元文件(*.wmf)" cboFile.AddItem "JPEG文件(*.jpg)" cboFile.AddItem "GIF文件(*.gif)" cboFile.ListIndex = 0 filFile.Pattern = "*.bmp" End Sub 属性: 指定文件列表框中所显示的文件类型 在文件列表框中只显示后缀为bmp的文件名

58 通过Select Case语句为文件列表框指定相应的Pattern属性值
Private Sub cboFile_Click () Select Case cboFile.ListIndex Case 0 filFile.Pattern = "*.bmp" Case 1 filFile.Pattern = "*.ico" Case 2 filFile.Pattern = "*.wmf" Case 3 filFile.Pattern = "*.jpg" Case 4 filFile.Pattern = "*.gif" End Select End Sub 通过Select Case语句为文件列表框指定相应的Pattern属性值 要同时显示多个类型时,用“;”将各描述符隔开。例如: filFile.Pattern ="*.bmp;*.ico"

59 Private Sub drvFile_Change() dirFile.Path = drvFile.Drive End Sub
属性: 驱动器列表框中选定的驱动器 改变当前驱动器时发生 Private Sub drvFile_Change() dirFile.Path = drvFile.Drive End Sub Private Sub dirFile_Change () filFile.Path = dirFile.Path 改变当前目录时触发 保持驱动器列表框、 目录列表框和文件列 表框三者的同步 属性: 列表框的当前目录 把drvFile中选定的驱动器设置成dirFile的当前目录,使目录列表框中显示当前驱动器上的所有一级目录。 将dirFile中选定的目录设置成filFile的当前目录,使二者一致

60 文件所在目录为根目录 Private Sub filFile_Click () If Right(filFile.Path, 1) = "\" Then imgShow.Picture = LoadPicture ( filFile.Path + filFile.FileName ) Else ( filFile.Path + "\" + filFile.FileName ) End If End Sub 属性: 所选文件的文件名 属性: 所选文件的路径(目录)

61 说明 驱动器列表框用于显示系统中所有的有效驱动器 目录列表框以目录树形式(分层缩进)显示当前目录的所有上级目录以及下一级子目录
文件列表框以列表形式显示当前目录中的所有文件名 使用时必须保持三者同步

62 【例7.9】设计文件编辑器,实现对Word文档和Txt文档的编辑。程序运行时,若用户在窗体中双击扩展名为doc的文件,则启动Word应用程序并打开该文件供用户对文档进行编辑;若双击扩展名为txt的文件,则切换到另一个窗体供用户对文件进行编辑。

63 第1个窗体(文件管理器)的程序代码 Private Sub Form_Load ()
cboFile.AddItem "Word文件(*.doc)" cboFile.AddItem "Txt文件(*.txt)" cboFile.ListIndex = 0 filFile.Pattern = "*.doc" End Sub

64 Private Sub cboFile_Click () If cboFile.ListIndex = 0 Then
filFile.Pattern = "*.doc" Else filFile.Pattern = "*.txt" End If End Sub 设置文件列表框中所显示的文件类型

65 保持驱动器列表框、目录列表框和文件列表框三者的同步
Private Sub drvFile_Change () dirFile.Path = drvFile.Drive End Sub Private Sub dirFile_Change () filFile.Path = dirFile.Path 保持驱动器列表框、目录列表框和文件列表框三者的同步

66 Private Sub filFile_DblClick ()
双击doc文件 Private Sub filFile_DblClick () If Right(frmEx7_9_1.filFile.FileName,4) = ".doc" Then If Right(frmEx7_9_1.filFile.Path, 1) = "\" Then docfname = frmEx7_9_1.filFile.Path + frmEx7_9_1.filFile.FileName Else +"\" + frmEx7_9_1.filFile.FileName End If

67 fname = "c:\Program Files\ Microsoft Office\Office\WINWORD.EXE"
+ " " + docfname RetVal = Shell(fname, 3) Else frmEx7_9_1.Hide frmEx7_9_2.Show End If End Sub 两者间用空格隔开 用户选择的文件路径及文件名 最大化窗 口形式 函数: 运行指定的应用程序

68 第2个窗体(文本编辑器)的程序代码 Private Sub Form_Activate()
If Right(frmEx7_9_1.filFile.Path, 1) = "\" Then txtfname = frmEx7_9_1.filFile.Path + frmEx7_9_1.filFile.FileName Else "\" + frmEx7_9_1.filFile.FileName End If

69 Open txtfname For Input As #1 Do While Not EOF(1) Line Input #1, a
txtFile.Text = "" Open txtfname For Input As #1 Do While Not EOF(1) Line Input #1, a txtFile.Text = txtFile.Text & a & Chr(13) & Chr(10) Loop Close #1 End Sub 将文件内容读出并显示在文本框中

70 Private Sub cmdSave_Click () With dlgFile .DialogTitle = "保存文件"
.InitDir = frmEx7_9_1.filFile.Path .FileName = frmEx7_9_1.filFile.FileName .Filter = "TXT文件|*.txt" .ShowSave End With 设置“保存文件”对话框的属性

71 Open dlgSave.FileName For Output As #1 Print #1, txtFile.Text Close #1
End Sub Private Sub cmdReturn_Click () frmEx7_9_2.Hide frmEx7_9_1.Show 将文本框中的内容写入文件中

72 缺省时程序以最小化窗口形式显示在状态栏中
Shell 函数 运行一个指定的应用程序 调用格式: Shell ( 应用程序名 [ ,运行窗口样式] ) 缺省时程序以最小化窗口形式显示在状态栏中 指定程序运行时的窗口样式 要执行的程序名及其所在的完整路径

73 Shell函数中允许使用的窗口样式 该窗体成为焦点 焦点仍为当前窗口 参数值 参数常量 窗口样式 vbHide 隐藏窗口 1
vbHide 隐藏窗口 1 VbNormalFocus 以原有大小和位置显示窗口 2 VbMinimizedFocus 窗口以图标显示 3 VbMaximizedFocus 最大化显示窗口 4 VbNormalNoFocus 以最近使用的大小和位置显示 6 VbMinimizedNoFocus 该窗体成为焦点 焦点仍为当前窗口

74 为了在运行应用程序的同时将用户指定的文件也一并打开,可以在应用程序名之后直接给出文件名,并使用空格将二者分开
要打开的文件名必须与应用程序兼容,否则将报错。


Download ppt "第7章 文 件 7.1 文件的概述 7.2 顺序文件的读写操作 7.3 通用对话框 7.4 文件系统控件."

Similar presentations


Ads by Google