1、Visual Basic 6.0 程序设计,高等学校计算机基础教育教材,上海中医药大学现代教育技术中心计算机教学部,第九章 文 件,1 文件的读写2 文件系统控件3 常用的文件操作语句和函数4 菜单制作5 通用对话框,9.1 文件的读写,文件:存储在外部介质上数据的集合。按名存取1. 记录由若干个相互关联的数据项组成。例如,由学生的学习成绩信息组成的记录:,数据项,2. 文件及其种类文件是记录的集合。顺序访问模式:顺序文件,记录可长可短;随机访问模式:随机文件,记录的长度相同;二进制访问模式:二进制文件(可认为记录长度为1)。,1. 打开文件Open 文件名 For 模式 As #文件号 Le
2、n=记录长度(1) 模式OUTPUT:写操作;INPUT:读操作;APPEND:追加到文件末尾。(2) 文件号1511,可以用FreeFile函数获得下一个可利用的文件号。(3) 记录长度小于或等于32767的整数,它指定数据缓冲区的大小。例如,打开C:VBSCORE,供写入数据,指定文件号为#1。OPEN C:VBSCORE FOR OUTPUT AS #1,一、 顺序访问模式,打开文件,读出或写入,关闭文件,2. 写入命令Print #文件号,输出列表保存文本框假定文本框的名称为Text1,文件名为TEST.DAT。方法1:把整个文本框的内容一次性地写入文件。Open TEST.DAT F
3、or Output As #1Print #1, Text1Close #1方法2:把整个文本框的内容一个字符一个字符地写入文件。Open TEST.DAT For Output As #1For i=1 To len(Test1)Print #1,Mid(Text1, i, 1);Next iClose #1,Write #文件号,输出列表紧凑格式。数据项之间插入“,”,并加上双引号。例如,命令:Write #1,One,Two,123内容:One,Two,1233. 关闭文件Close #文件号, #文件号.例如,Close #1, #2, #3,4. 读顺序文件INPUT #文件号,变量
4、列表把读出的每个数据项分别存放到所对应的变量。LINE INPUT #文件号,字符串变量读一行到变量中,主要用来读取文本文件。INPUT$(读取字符数,#文件号)随意读取字符5. 函数LOF(文件号):返回文件的长度(总字节数)。EOF(文件号):返回读写位置。指针在文件尾时,EOF函数为True,否则为False。,读文本文件到文本框假定文本框名称为Text1,文件名为MYFILE.TXT。方法1:一行一行读Text1.Text Open MYFILE.TXT For Input As #1Do While Not EOF(1) Line Input #1, InputData Text1.
5、Text Text1.Text + InputData+vbCrLfLoopClose #1,方法2:一次性读Text1.Text Open MYFILE.TXT For Input As #1Text1.Text = Input$( LOF(1), 1)Close #1方法3:一个个字符读Dim InputData as String*1Text1.Text Open MYFILE.TXT For Input As #1Do While Not EOF(1)InputData= Input$(1,#1) Text1.Text Text1.Text + InputDataLoopClose #
6、1,例9.2读入文本文件。,例9.3 文件加密程序。,Private Sub File1_DblClick()Open tfilename For Input As #1Text1.Text = Do While Not EOF(1) indata = Input(1, #1) Text1.Text = Text1.Text + indataLoopEnd Sub,CommonDialog1.Action = 2Open CommonDialog1.FileName For Output As #1For i = 1 To Len(Text1.Text) Print #1, Mid(Text1
7、.Text, i, 1);Next iClose #1,参阅例6.14,9.2 驱动器、目录和文件列表框,Sub drvDrive_Change() dirDirectory.Path = drvDrive.DriveEnd Sub,Sub dirDirectory_Change() filFile.Path = dirDirectory.PathEnd Sub,Sub Form_Load() Item = “所有文件(*.*)” cboType.AddItem Item + Space(20 - Len(Item) + *.* Item = 窗体文件(*.FRM) cboType.AddIt
8、em Item + Space(20 - Len(Item) + *.FRM Item = 位图文件(*.BMP) cboType.AddItem Item + Space(20 - Len(Item) + *.BMP cboType.ListIndex = 2End SubSub cboType_Click() filFile.Pattern = Mid(cboType.Text, 21)End Sub,Sub filFile_Click( ) End SubSub filFile_DblClick( ) End Sub,例9.1示例程序,1. 驱动器列表框Drive属性: 对象.Drive
9、 = driveChange事件: 重新设置Drive属性引发Change事件 2. 目录列表框Path属性 : 对象.Path = pathnameChange事件: 重新设置Path 属性引发Change事件,3. 文件列表框 Path属性: 显示该路径下的文件。 重新设置Path属性引发PathChange事件。 Pattern属性: 显示的文件类型。 对象.Pattern = value 重新设置Pattern属性引发PatternChange事件。 例如:filFile.Pattern = *.frm,显示*.frm文件。 多个文件类型用分号;分界。例如: *.frm;*.frx F
10、ileName属性: 对象.FileName = pathname 引用时只返回文件名,相当于ilFile.List(filFile .ListIndex),需用Path属性得到其路径;设置时可带路径。,Click、DblClick事件: 例如,单击输出文件名。Sub filFile_Click( ) MsgBox filFile.FileNameEnd Sub 例如,双击执行可执行程序:Sub filFile_DblClick( ) ChDir (dirDirectory.Path) 改变当前目录 RetVal = Shell(filFile.FileName, 1) 执行程序End Sub
11、,(1) 顺序文件按顺序依次把记录写入文件;按顺序依次把记录读出来。,文本文件:一行一条记录,记录可长可短,以“换行”字符为分隔符号。(2) 随机文件随机文件可以直接访问文件中的任意一个记录。记录长度相同;根据记录号访问;,(3) 二进制文件直接把二进制码存放在文件中。,二、随机文件,1. 打开Open 文件名 For Random As #文件号 Len=记录长度2. 写操作Put #文件号,记录号,变量名将一个记录变量的内容写到指定的记录位置处。忽略记录号,则表示在当前记录后的位置插入一条记录。3. 读操作Get #文件号,记录号,变量名忽略记录号,则读出当前记录后的那一条记录。,例9.4
12、 学生信息管理程序。追加记录(Command1):将一个学生的信息作为一条记录添加到随机文件末尾。显示记录(cmdDisplay):显示在右边文本框(text4)中指定的记录。,1. 打开Open 文件名 For Binary As #文件号2. 写操作Put #文件号,位置,变量名写入长度等于变量长度的数据。3. 读操作GET #文件号,位置,变量名 从指定位置开始读出长度等于变量长度的数据存入变量中,数据读出后移动变量长度位置,如果忽略位置,则表示从文件指针所指的位置开始读出数据,数据读出后移动变量长度位置。,三、二进制文件,例9.5 文件复制Dim char As ByteDim Fil
13、eNum1,FileNum2 as IntegerFileNum1 = FreeFile打开源文件Open C:STUDENT.DAT For Binary As # FileNum1FileNum2 = FreeFile 打开目标文件Open C:STUDENT.BAK For Binary As # FileNum2Do While Not EOF(FileNum1)Get #1, , char 从源文件读出一个字节Put #2, , char 将一个字节写入目标文件LoopClose #FileNum1Close #FileNum2,9.3 常用的文件操作语句和函数,1. FileCop
14、y语句格式:FileCopy source , destination 功能:复制一个文件。 说明: FileCopy语句不能复制一个已打开的文件。2. Kill语句 格式:Kill pathname 功能:删除文件。 说明:pathname中可以使用统配符“*”和“?”。 例如:Kill *.TXT3. Name 语句 格式:Name oldpathname As newpathname 功能:重新命名一个文件或目录。 说明:(1) Name具有移动文件的功能。 (2) 不能使用统配符“*”和“?”,不能对一个已打开的文件上使 用 Name语句。,4. ChDrive 语句格式:ChDriv
15、e drive功能:改变当前驱动器。 说明:如果drive为 “ ”,则当前驱动器将不会改变;如果drive中有多个 字 符,则ChDrive只会使用首字母。5. MkDir 语句格式:MkDir path功能:创建一个新的目录。6. ChDir 语句格式:ChDir path功能:改变当前目录。例如:ChDir D:TMP 7. RmDir 语句格式:RmDir path功能:删除一个存在的目录。 说明:只能删除空目录。,8. CurDir函数格式:CurDir(drive)功能:利用CurDir函数可以确定任何一个驱动器的当前目录。 说明: drive为 ,则CurDir返回当前驱动器的当
16、前目录。例9.6 利用ChDrive和ChDir语句改写例9.1中的File1_DblClick()事件过程。Sub File1_DblClick()ChDrive Drive1.Drive 设置缺省驱动器ChDir File1.Path 设置缺省目录RetVal = Shell(File1.FileName, 1)End Sub,例9.7 为例9.1添加事件过程File1_MouseDown(),使之支持Del键,即按下Del键删除选定的文件。Sub File1_KeyDown(KeyCode As Integer, Shift As Integer)If KeyCode = vbKeyDe
17、lete ThenChDrive Drive1.DriveChDir File1.PathKill File1.FileNameFile1.Refresh 文件删除后更新文件列表框End IfEnd Sub,9.4 菜单的设计,下拉式菜单系统的组成结构 :,主菜单名快捷键热键下级子菜单标记,主菜单条,分隔线,子菜单名,一、菜单编辑器的使用 工具菜单编辑器(Ctrl+E);窗体上快显菜单菜单编辑器。,常用属性:1. 标题(Caption) 热键 前面加&2. 名称(Name)文本框 分隔符也应有名称3. 快捷键(Shortcut) 菜单名没有快捷键4. 复选(Checked)检查框 TRUE 有
18、5. 有效(Enabled)检查框6. 可见(Visible)检查框,二、 菜单项增减,在程序运行时,菜单随时增减,如“文件”菜单能保留最近打开的文件数。这同控件数组一样,使用菜单数组。步骤: 1.在菜单设计时,加入一个菜单项,其Index为0(菜单数组), Visual为False。 2.在程序运行时,通过Load方法向菜单数组增加新的菜单项。 同样,要删除所建立的菜单项,使用UnLoad方法向菜单数组减少菜单项。,三、 弹出菜单(快捷菜单),弹出菜单是独立于窗体菜单栏而显示在窗体内的浮动菜单。显示位置取决于单击鼠标键时指针的位置。设计与普通菜单相同(如果不希望菜单出现在窗口的顶部,该菜单名
19、Visible属性设置为False )。菜单弹出的方法: 对象.PopupMenu 菜单名, 标志, x, y 标志,表示弹出的位置和触发的键,Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then PopupMenu EditMenu, vbPopupMenuCenterAlignEnd Sub,9.5 通用对话框(CommonDialog),属性Action:打开通用对话框。DialogTiltle:对通用话框标题。CancelError Tr
20、ue:选择“取消”按钮,出现错误警告;Err.Number置为32755(cdCancel)。 False(缺省):选择“取消”按钮,没有错误警告。,工程/部件,选定 部件标签,选定Microsoft CommDialog Control 6.0,通用对话框添加到工具箱:,确定,打开通用对话框:,1.文件对话框(打开、保存)需设置的属性,属性FileName:包含路径;FileTitle:不包含路径。Filter:例如, Documents(*.DOC)|*.DOC|Text Files(*.TXT)|*.txt|All Files|*.*FilterIndex:决定在文件类型列表框中显示第几
21、组类型的文件。InitDir:初始化路径。,“打开”文件对话框属性页,DialogTiltle,FileName,InitDir,Filter,FilterIndex,DefaultExt,例9.1 用命令按钮的Click事件显示文件打开对话框。,CommonDialog1.InitDir= C:Windows 设置初始目录CommonDialog1.Filter = 文本文件 | *.Txt 过滤文件类型 CommonDialog1.CancelError = True 控制取消按钮 CommonDialog1. ShowOpen 打开对话框,2. “另存为”对话框没有提供真正的存储文件操作
22、,仍需要编程完成储存操作。属性 DefaultExt:缺省扩展名。3. “颜色”对话框属性Color:返回或设置选定的颜色。,4.“字体”对话框,Flags属性:指示所显示的字体类型,必须设置。 cdlCFScreenFonts&H1屏幕字体 cdlCFPrinterFonts&H2打印机字体 cdlCFBoth&H3打印机字体和屏幕字体。 cdlCFEffects&H100显示删除线和下划线检查框以及颜色组合框,FontName,FontBold、FontItalic,FontSize,FontStrikethru,FontUnderline,Color,Min、Max,5. “打印”对话框属性FromPage:起始页号;ToPage:终止页号;Copies:打印份数。如果打印驱动程序不支持多份打印,该属性有可能始终返回 1。6. “帮助”对话框帮助文件需要用其他的工具制作,如Microsoft Windows Help Compiler。 属性 HelpCommand:在线Help帮助类型; HelpFile:Help文件的路径及其名称; HelpKey:在帮助窗口显示由该帮助关键字指定的帮助信息。,课后习题,Pg162 第1题Pg186 第1、2题,