VB程序设计 第九章 文件
- 格式:doc
- 大小:232.50 KB
- 文档页数:22
第九章文件主要内容●文件系统控件●文件的读写●常用的文件操作语句和函数文件是存储在外部介质(如磁盘)上的以文件名标识的数据集合。
计算机处理的大量数据都是以文件的形式存放在外部介质上的,操作系统也是以文件为单位管理数据的。
要想访问外部介质上的数据,必须先按文件名找到指定的文件,然后再从该文件中读取数据。
要想把数据存储到外部介质上也必须先建立一个文件(以文件名标识)才能向外部介质上输出数据。
9.1 文件系统控件文件系统控键有三种:驱动器列表框(DriveListBox)、目录列表框(DirListBox)和文件列表框(FileListBox)。
三种控件的Name缺省属性分别是Drive1、Dir1、File1。
1. 驱动器列表框(DriveListBox)Drive属性—指定驱动器,只能在运行时引用或设置。
引用格式:[对象.]Drive [= drive]Change事件当重新设置Drive属性时发Change事件2. 目录列表框(DirListBox)Path属性–确定路径,只能在运行时引用或设置。
引用格式:[对象.]Path [= pathname]Change事件当重新设置Path属性时触发Change事件3. 文件列表框(FileListBox)Path属性-显示选定文件的路径,只能在运行时引用或设置(属性窗口不可见)。
Pattern属性 -- 显示的文件类型(默认值是*.*,即所有类型的文件)。
引用格式:[对象.]Pattern [= value]例如:filFile1.Pattern = “*.frm”,则在文件列表框内仅显示窗体(*.frm)文件。
FileName属性—只能返回选定文件的文件名(属性窗口不可见)引用格式:[对象.]FileName [= pathname]FileName在引用时只返回文件名,它相当于File1.List(File1 .ListIndex),还需用Path属性获取FileName所在路径;设置时可带路径。
说明:文件控件的List属性(是一个包含文件控件列表内所有文件名的数组)和ListIndex(反映L ist数组的下标)属性在文件控件属性窗口不可见,只有在设计程序代码时在提示窗口中可见。
PathChange和PatternChange事件当重新设置Path属性引发PathChange事件。
当重新设置Pattern属性引发PatternChange事件。
参见myvb\ex9_b1\工程1.VBPPrivate Sub File1_Click()Print File1.List(0) ‘显示文件控件File1内的第一个文件名Print File1.List(File1.ListIndex)‘显示刚才被单击的文件名Print File1.FileName ‘显示刚才被单击的文件名Print File1.List(File1.ListCount - 1)‘显示文件控件File1内的最后一个文件名Print File1.Pattern ‘显示文件控件File1内所有文件的扩展名Print File1.Path ‘显示文件控件File1内所有文件的目录路径(含盘符)End SubDblClick事件:例如,双击执行可执行程序Sub filFile_DblClick( )ChDir (dirDirectory.Path) ’改变当前目录RetVal = Shell(filFile.FileName, 1)’执行程序End Sub说明:由于“文件”本身具有Normal、ReadOnly、Archive、Hidden及System 属性,因此一般情况下,在文件列表框中是不显示隐藏属性文件的,若想显示,则应将文件列表框中的Hidden属性设置为True,其含义是“要看见隐藏文件”。
出该文件名,双击一个可执行文件的文件名时就运行该程序。
[例9.1]在myvb\ex9_1\ex9_1.vbp 下(三个文件控件之间的连动)窗体Form2代码Public Fname As String '文件标识符,窗体2中定义的全局量Private Sub Dir1_Change() '将完整的目录路径送给文件列表Path 属性 File1.Path = Dir1.Path 'path 属性在属性窗口不可见End SubPrivate Sub Drive1_Change() '改变目录列表中Path 属性的驱动器名Dir1.Path = Drive1.Drive 'path 属性在属性窗口不可见End SubPrivate Sub Form_Load()Combo1.AddItem "所有文件"Combo1.AddItem "工程、窗体文件"Combo1.AddItem "图形、图像文件"Combo1.ListIndex = 0 '指定组合列表框默认显示"所有文件"File1.Pattern = "*.jpg;*.gif;*.ico;*.bmp;*.cur" '文件控件内默认列出的文件类型End SubPrivate Sub Combo1_Click() '单击组合列表框,改变文件控件内所列文件类型 Dim item As Stringitem = Choose(Combo1.ListIndex + 1, "*.*", "*.frm;*.VBP", "*.bmp;*.jpg;*.WMF;*.cur") File1.Pattern = item '确定文件列表框所列文件的类型End Sub'将此内容放在单击事件过程中也可,但单击事件在这里屏蔽了双击事件 '演示时选择一个扩展名为EXE 的文件,比如c:\windows\calc.exe (计算器),其他类型的文件不可用shell 打开Private Sub File1_DblClick()Dim Retval As Long 'Retval为Shell函数成功调用的返回值为一个任务标识 If Right(File1.Path, 1) = "\" Then '当前选定的目录是根目录Fname = File1.Path + File1.FileNameElse '当前选定的目录是子目录 Fname = File1.Path + "\" + File1.FileNameEnd IfIf Right(File1.FileName, 3) = "EXE" Or Right(File1.FileName, 3) = "COM" Then Retval = Shell(Fname, 1) '以有指针,正常窗口类型打开文件ElseForm3.ShowEnd IfEnd SubPrivate Sub File1_KeyDown(KeyCode As Integer, Shift As Integer)'按Del键删除文件If KeyCode = vbKeyDelete Then 'Del 键扫描码ChDrive Drive1.Drive ' 设置缺省驱动器ChDir File1.Path ' 设置缺省目录Kill File1.FileNameFile1.Refresh '更新列表框End IfEnd Sub窗体Form3代码Private Sub Command1_Click() ‘显示命令'选择组合框内的所有文件或工程、窗体文件选项而显示在文件列表框内的文件即使是图形类文件也不显示If Form2.File1.Pattern = "*.*" Or Form2.File1.Pattern = "*.frm;*.VBP" Then MsgBox ("不是图形、图像文件")Print Form2.FnameElseImage1.Picture = LoadPicture(Form2.Fname)End IfEnd SubPrivate Sub Command2_Click() ‘返回命令Unload Form3End Sub9.2 文件的读写9.2.1 文件及其结构文件:存储在外部介质上的数据的集合称为文件。
文件按名存取。
1. 记录由若干个相互关联的数据项组成。
例如,由学生的学习成绩信息组成的记录,它由学号、姓名、各课成绩、总分等数据项组成。
2. 文件及其种类VB文件由纪录组成的,而记录是由字段组成的,字段是由字符组成的。
根据不同的分类标准文件可分为不同的类型。
作;关闭文件。
9.2.2 顺序访问模式1. 打开文件要对文件操作,必须首先打开文件。
格式:Open “文件名” [For 方式] [Access存取类型][lock] As [#]文件号 [Len=记录长度]文件名可以是字符串常量,也可以字符串变量(包括文件所在的目录路径)。
(1)方式OutPut- 对文件进行写操作,如果文件不存在,则创建新文件。
如果文件已存在,则覆盖文件中已有的内容。
用于顺序输出方式,打开时文件指针定位在文件开头。
InPut - 对文件进行读操作,如果文件不存在,则会出错。
Append- 在文件未尾追加纪录,不覆盖文件原有的内容。
如果文件不存在,则创建新文件。
用于顺序输出方式,打开时文件指针定位在文件的尾部。
省略方式,则默认为Random方式打开文件,对于方式为Binary的则为二进制方式打开文件。
(2)存取类型Read -(只读) 、Write - (只写)、ReadWrite -(可读可写)。
(3)lock(允许还是不允许共享该文件)-- Shared(共享)、 Lock Read(锁定读取)、 Lock Write(锁定写入)、Lock Read Write(锁定读写)。
(4) 文件号1~511,可以用FreeFile函数获得一个可利用的文件号。
FreeFile[(intRangeNumber)],有参数,返回值为1-225或256-511。
若无参数intRangeNumber就不必使用圆括号,返回值为1-255。
例如:intFileNumber=FreeFileOpen “student.dat” For Output As intFileNumber同一个文件可以用几个不同的文件号打开。