《visual basic 第13章 文件管理》由会员分享,可在线阅读,更多相关《visual basic 第13章 文件管理(92页珍藏版)》请在金锄头文库上搜索。
1、第13章 文件管理w 13.1 文件系统控件 w 13.2 用传统语句和函数访问文件 w 13.3 文件系统对象 结束13.1 文件系统控件 w 13.1.1 驱动器列表框 w 13.1.2 目录列表框 w 13.1.3 文件列表框w 13.1.4 文件系统控件的同步操作 返回首页13.1.1 驱动器列表框 (1)驱动器列表框(DriveListBox)控件的作用是 为用户提供一个选择有效磁盘驱动器的功能。该控 件可以显示出用户系统中所有有效磁盘驱动器的列 表。在图13.1的示意图中,左边是驱动器列表框的 原始状态,右边是展开后的状态。DriveListBox控件最重 要的属性是Drive属性
2、。程 序运行时,可以通过该属 性获得当前所选择的驱动 器,也可以改变Drive属性 的值,指定某个驱动器。 图13.1 驱动器列表框示意图 13.1.1 驱动器列表框 (2)例如:将驱动器列表框Drive1中所选择的驱动器显示在文 本框Text1中: Text1.Text = Drive1.Drive将驱动器列表框Drive1中的驱动器设置为“e:”: Drive1.Drive = “e:“访问驱动器列表框中的列表项目时,其方式与普 通列表框控件类似,即可以使用List属性数组访问 ;ListCount表示列表项目的个数;ListIndex表示当 前选中的项目在列表中的索引位置。 13.1.1
3、 驱动器列表框 (3)驱动器列表框的主要事件是Change事件。在程 序的运行阶段,如果选择了一个驱动器列表项目, 或者通过代码改变了Drive属性的值,均将引发控 件的Change事件。【例13.1】将系统的驱动器信息收集到一个列表 框中,若在驱动器列表框中选择了一个驱动器,则 列表框中的相应驱动器也要被选中。在窗体上添加一个驱动器列表框Drive1。添加一 个普通列表框List1,设其Style属性为1(带有复选 框)。设窗体的Caption为“驱动器列表框示例”。 13.1.1 驱动器列表框 (4)程序的运行结果见图13.2。代码如下:Private Sub Form_Load()Dim
4、 i As IntegerFor i = 0 To Drive1.ListCount - 1List1.AddItem Drive1.List(i)Next i End SubPrivate Sub Drive1_Change()List1.Selected(Drive1.ListIndex) = True End Sub 返回首页返回本节13.1.2 目录列表框(1)目录列表框(DirListBox)控件用于显示当前 或指定的驱动器的全部目录结构,其显示方式是分 层的文件夹(目录)列表,类似于Windows的“资源 管理器”。目录列表框默认显示的是与当前目录相 关的目录结构,通过双击列表中的
5、一个目录项,就 可以打开该目录项的第一级子目录,从而浏览到全 部的目录结构,如图13.3所示。 图13.3 目录列表框 13.1.2 目录列表框(2)DirListBox控件的Path属性用来返回或设置当前 的目录路径,其值是一个指示路径的字符串。例如 ,输出目录列表框控件Dir1中的当前目录路径: Print Dir1.Path又如,将目录列表框控件Dir1中的当前目录路径设 置为“e:xwx2004”: Dir1.Path = “e:xwx2004“目录列表框的List属性数组中包含了所有的目录 列表项目,访问该数组的方式与普通列表框控件类 似,也是通过索引值ListIndex进行。 13
6、.1.2 目录列表框(3)目录列表框的索引值有以下特殊规定: (1)Path属性所指定的目录的索引值总是为-1,因 此,通过Dir1.Path或Dir1.List(-1)都可以获得当 前目录。 (2)紧邻当前目录之上的目录,其索引是-2,再上 一个为-3,依次类推。 (3)紧邻当前目录下的第一个子目录,其索引是0 ;若有多个一级子目录,则每个子目录的索引分别 是0、1、2、,直到ListCount-1。因此ListCount 属性表示当前目录下的一级子目录个数,而不是目 录列表框中列出的所有项目。 13.1.2 目录列表框(4)例如,一个目录列表框Dir1的索引值情况如图 13.4所示,其中当
7、前目录是“VB”,其下的一级子 目录有3个,故Dir1.ListCount的值为3。 图13.4 目录列表框的索引值 13.1.2 目录列表框(5)目录录列表框的事件主要是Change事件和Click 事件。单击单击 目录录列表框中的某个项项目时时,系统统自 动动修改ListIndex属性值值,同时时触发发Click事件 。双击击目录录列表框中的某个项项目时时,自动设动设 置 Path属性为为当前选择选择 的目录录,并修改 ListIndex属性值为值为 -1,同时时触发发Change事件 。如果在代码码中直接修改了Path属性的值值,也会 触发发Change事件。目录列表框的Change事件
8、和Click事件之间没 有冲突,但通常情况下,我们只对Change事件编 程。 返回首页返回本节13.1.3 文件列表框(1)文件列表框(FileListBox)控件根据指定的 目录,在程序运行时自动显示该目录下所有文件 的文件名。文件列表框的外观与普通列表框相似 ,如图13.5所示。 文件列表框的Path属性 返回或设置当前指定的目录 ,一旦Path属性的值发生改 变,文件列表框控件会自动 刷新显示列表。图13.5 文件列表框 13.1.3 文件列表框(2)FileName属性返回在文件列表框中选择的文件名 。Pattern属性指定文件列表框控件显示的文件类 型,默认值为“*.*”,即显示所
9、有类型的文件。如 果要显示特定的文件类型,则可设置该属性。例 如要显示扩展名为.txt的文件,可以将Pattern属 性设置为“*.txt”。若需要同时显示多种类型的文 件,则Pattern属性设置的文件类型要用分号分隔 。例如设置Pattern属性为“*.txt ; *.doc”,表 示显示扩展名为.txt和.doc的文件。13.1.3 文件列表框(3)文件列表框的List属性返回或设置控件列表中的 文件名,这是一个数组,0是列表中第一个文件名 的索引号;ListIndex属性代表当前选中文件名的 索引号。假如File1是一个FileListBox控件,则 File1.FileName与Fi
10、le1.List(File1.ListIndex) 等价。ListCount属性返回控件列表内文件名的个数。文件列表框的事件主要是Click事件和DblClick事 件。这两个事件以及List属性、ListIndex属性和 ListCount属性的用法及作用与普通列表框相同。返回首页返回本节13.1.4 文件系统控件的同步操作(1) 将上述三个文件系统控件组合起来,就可以 查看整个驱动器文件系统,但要实现它们之间的 同步显示,就需要编写特定的程序。下面我们通 过一个例题说明如何实现三者之间的同步操作。 【例13.2】使用文件系统控件获得文件名及其路 径。在窗体上添加一个DriveListBox
11、控件Drive1 、DirListBox控件Dir1和FileListBox控件File1 ;再添加两个标签Label1、Label2,设其 BorderStyle均为1(具有边框),Caption均为空 ,用来显示路径和文件名。 13.1.4 文件系统控件的同步操作(2) 设计的关键是,必须保证三个文件系统控件的 相互协调联动。在程序的运行阶段,改变驱动器 时,就会触发Drive1控件的Change事件,通过 Dir1.Path = Drive1.Drive来改变Dir1的目录。 当Dir1改变目录时,就会激活Dir1控件的Change 事件,然后通过File1.Path = Dir1.Pa
12、th来使 File1控件显示改变目录后的文件列表。另一个要注意的问题是File1的Path属性。按 我们通常的想法,File1.Path与File1.FileName 进行字符串连接后应该得到完整的文件路径和文 件名,但实际上并非如此。 13.1.4 文件系统控件的同步操作(3) 如果选中的一个文件test.txt位于E:根目录下, File1的Path属性所取得的目录路径是“E:“, File1.Path与File1.FileName进行字符串连接后 的结果是“E:test.txt“;然而,如果test.txt文 件位于E:根目录下的user子目录下,则Path属性 所取得的目录路径是“E:
13、user“,File1.Path与 File1.FileName连接后的结果是“ E:usertest.txt“,显然出错。人为地在后一种 情况下的路径后面加上“”符号,既能够统一形 式,也符合我们通常的习惯,避免出错。这便是 本例中定义函数MakePath的原因。 13.1.4 文件系统控件的同步操作(3) 运行结果如图13.6 所示。图13.6 例13.2运行结果 13.1.4 文件系统控件的同步操作(4) 代码如下: 自定义函数:生成以“”结尾的路径字符串Function MakePath(S As String) As StringIf Right(S, 1) = “ ThenMake
14、Path = SElseMakePath = S “wang“; “li“ Write # 6, 78; 99; 67Close #6执行上面的程序段后,写入到文件d:shu.dat中的数据如 下: “zhang“,“wang“,“li“ 78,99,6713.2.1 访问顺序文件 (10)Print # 语句可以把格式化显示的数据写入到顺序 文件中。例如: Open “d:shu.dat“ For Output As #2Print # 2, “zhang“; “wang“; “li“ Print # 2, 78; 99; 67Close #2执行以上程序段后,写入到文件中的数据如下:zha
15、ngwangli78 99 6713.2.1 访问顺序文件 (11)4文件的结束读文件时,使用EOF函数可以判断是否已经到 达了文件的结尾。对于以Input方式打开的顺序文 件、以Random方式打开的随机文件,如果该函数 返回值是True,则表明已经到达文件的结尾,此 时再执行读操作,将引发错误。语法:X = EOF(filenumber)【例13.4】编写学生成绩录入程序。可以在输 入一个学生的姓名和成绩后,将其存入E:Test.txt 中,也可读出文件中保存的数据并显示出来。13.2.1 访问顺序文件 (12)用两个文本框Text1和Text2进行姓名和成绩的输 入;用命令按钮cmdSa
16、ve执行“写文件”操作;用 命令按钮cmdRead执行“读文件”操作;用列表 框List1显示读出的数据。运行情况如图13.7。 图13.7 例13.4运行结果 13.2.1 访问顺序文件 (13)代码如下: Private Sub cmdSave_Click() 无姓名或无成绩时的输入无效If Text1.Text = “ Or Text2.Text = “ ThenExit SubEnd If 按追加方式打开文件,定为1号Open “e:test.txt“ For Append As #1 将文本框内容成对地写到1号文件中Write #1, Text1.Text, Text2.TextClose #1 End Sub13.2.1 访问顺序文件 (14)Private Sub cmdRead_Click() 定义存放姓名和成绩的变量Dim name As String, score As String 按读方式打开文件,定为1号Open “e:test.txt“ For Input As #