1、第5章 文件处理应用程序设计方法,掌握文件读写的基本方法 掌握与文件处理相关的语句和函数的用法 理解文件系统控件的基本功能 了解文件管理器应用程序的开发过程,学习目标,一、文件管理器程序任务,任务描述 界面设计 代码设计,(1)、文件是指存储在外部存储介质上的数据的集合,是一种可以永久性存储数据的形式,操作系统以文件为单位管理数据,文件名是文件存在的标识。 VB提供的驱动器列表框(DriveListBox)、目录列表框(DirListBox)和文件列表框(FileListBox)三种控件及ChDrive和ChDir两个文件管理命令语句来实现对磁盘文件进行列表、查看、删除、移动等操作。,(2)、
2、任务创建:第一步新建工程为“文件管理”,主要用工具箱中的驱动器列表框(DriveListBox)、目录列表框(DirListBox)和文件列表框(FileListBox)及复选框(CheckBox)。第二步创建窗体Form1属性Caption为“文件系统控制”;三个标签Label属性Caption分别为“选择驱动器”、“选择文件”、“文件属性”;六个复选框的标签属性分别为“常规”、“文件夹”、“存档”、 “只读”、“系统” 、“隐藏”。,5.1.1 任务概述,利用Windows操作系统的“资源管理器”和“我的电脑”等程序,可以对磁盘文件进行列表、查看、删除、移动等操作,人们一般将这类程序称为文
3、件管理器,主要用到的三个控件,文件列表框,驱动器列表框,目录列表框,界面设计,代码设计(详见演示),1驱动器列表框控件的Change事件当选择驱动器列表框,改变当前驱动器会触发该控件的 Change事件。因当前驱动器改变,所以目录列表框、 文件列表框的路径值也因该相应改变。该事件的程序如下: Private Sub Drive1_Change()ChDrive Drive1.Drive 改变当前驱动器Dir1.Path = Drive1.Drive 改变目录列表框的路径Call ClearAttr 清空属性复选框组 End Sub,2目录列表框控件的Change事件 Private Sub D
4、ir1_Change()ChDir Dir1.Path 改变当前目录File1.Path = Dir1.Path 改变文件列表框的路径ShowAttr Dir1.Path 设置属性复选框组 End Sub,5文件列表框控件的Click事件 Private Sub File1_Click()ShowAttr File1.FileName 设置属性复选框组 End Sub,Private Sub ShowAttr(ByVal sPath As String)Dim iAttr As Integer 存储文件的属性值iAttr = GetAttr(sPath) 获取文件的属性值If iAttr An
5、d vbNormal Then 判断是否为普通文件Check1(0).Value = Checked 若是,则普通属性复选框被选中End IfIf iAttr And vbReadOnly Then 判断是否为只读文件Check1(1).Value = Checked 若是,则只读属性复选框被选中End IfIf iAttr And vbHidden Then 判断是否为隐藏文件Check1(2).Value = Checked 若是,则隐藏属性复选框被选中End IfIf iAttr And vbSystem Then 判断是否为系统文件Check1(3).Value = Checked 若
6、是,则系统属性复选框被选中End IfIf iAttr And vbDirectory Then 判断是否为目录(文件夹)Check1(5).Value = Checked 若是,则文件夹属性复选框被选中End If If iAttr And vbArchive Then 判断是否为存档文件Check1(4).Value = Checked 若是,则存档属性复选框被选中End If End Sub,二、文件系统控件及相关语句,(一)改变当前驱动器语法:Chdrive 例如:ChDrive “D” 将当前驱动器改为D,(2) 改变当前目录语法:ChDir 说明:ChDir语句改变缺省目录位置,但
7、不会改变缺省驱动器位置。例如:ChDir “D:TMP” 将当前目录改变为D:TMP,二、文件系统控件及相关语句,(三) 删除文件语法:Kill 说明:可以使用“*”和“?”例如:Kill “D:DataTest.txt”Kill “C:Temp*.tmp”,二、文件系统控件及相关语句,(四) 拷贝文件语法:FileCopy ,二、文件系统控件及相关语句,(五) 对文件重命名语法:Name As 说明:Name语句重新命名文件并将其移动到一个不同的目录或文件夹中。例如:Name “Oldfile” As “Newfile”Name “C:mydiroldfile” As “C:yourdirn
8、ewfile”,二、文件系统控件及相关语句,(六) 创建新的目录(或文件夹)语法:MkDir 或例如:MkDir “成绩单”,二、文件系统控件及相关语句,(七)删除目录(或文件夹)语法:RmDim 或例如:RmDir “C:成绩单临时文件夹”,二、文件系统控件及相关语句,(八)得到当前的路径语法:CurDir 驱动器名说明:返回指定的或当前驱动器的路径比如:假设C驱动器的当前路径为”C:Program Files” 假定C为当前的驱动器 Dim mypath as string Mypath=curdir 返回” C:Program Files” Mypath=curdir(“C”) 返回”
9、C:Program Files”,二、文件系统控件及相关语句,(九) 设置文件属性语法:SetAttr ,说明:文件属性值是常数或数值表达式,其总和用来表示文件的属性。 文件属性值取值如表P126比如:SetAttr “Test.txt”,vbArchive+vbReadOnly,二、文件系统控件及相关语句,(十) 得到文件属性语法:GetAttr 说明:该函数返回一个Integer类型数据此数值为文件、目录华文件夹的属性,属性值的取值同表P126,比如:iAttr=GetAttr(“test.txt”),二、文件系统控件及相关语句,(十一) 常用文件系统控制,二、文件系统控件及相关语句,1.
10、驱动器列表框(1) 常用属性:Drive该属性用于在程序运行时设置或返回选定的驱动器,只在运行阶段有效。如:Drive1.Drive=“C” 注意:Drive属性只是指定了当前驱动器,而要想使指定的驱动器真正成为当前驱动器,还必须使用ChDrive语句。 如:ChDrive Drive1.Drive(2) 重要事件:Change事件,2.目录列表框(1) 常用属性:Path该属性用于设置或返回当前目录的完整路径,包括驱动器名和上级目录名。Path属性只在运行阶段有效。 如:Dir1.Path=“C:Visual BasicStu” 注意:Path属性只是指定了当前目录,而要想使指定的目录真正成
11、为当前目录,还必须使用ChDir语句。 如:ChDir Dir1.Path(2) 重要事件:Change事件,3.文件列表框常用属性 (1)Path属性:与目录列表框相同,用于设置文件列表框所示的完整路径名称。如:File1.path=“C:Visual BasicStu” (2)Pattern属性:设置文件列表框中可以显示的文件类型。默认值为*.*,表示显示所有文件。如:File1.Pattern=“*.txt” (3)FileName属性:设置或返回选定的文件名称,只在运行阶段可用。,三、标准文件输入/输出,顺序文件 随机文件 二进制文件,文件结构是指数据某种特定的存放方式。Visual
12、Basic文件通过记录、字段和字符组成。 . 字符(Character):是构成文件的最基本单位。字符可以是数字、字母、特殊符号。 . 字段(Field):即字段域或域。若干个字符组成一个字段,用来表示一项数据。例如:姓名 “张三”就是一个字段,它由4个字符(2个中文字符)组成。 . 记录(Record):一组相关的字段组成一个记录。例如:在学生信息表中,每个学生的学号、姓名、性别、年级、班号、各科成绩等多个字段,构成一个记录。在Visual Basic中,一般以记录为单位处理数据。 . 文件(File):一个或多个记录构成文件。例如:在学生信息表中,有100个学生的信息,每个学生信息是一个记
13、录,100个记录构成一个学生信息表文件。,三、标准文件输入/输出,根据文件中数据的存取方式和结构,可分为顺序文件和随机文件和二进制文件;顺序文件(Sequential File):文件的记录一个接一个地按顺序进行存放,每条记录的长度随信息需要而设置(记录长度不固定)。在这类文件中,只提供第一个记录的存放位置,其它记录位置无法获悉。当要查找某个数据时,只能从文件头开始,一个记录一个记录地顺序读取,直至找到要查找的记录为止。顺序文件无法灵活地对文件进行拼接、插入、修改和存取操作,适用于有规律、不经常修改的数据。,文件分类:,根据文件的内容可以分为程序文件和数据文件;根据文件的编码可以分为文本文件和
14、二进制文件;,随机存取文件(Random Access File):又称直接存取文件,简称随机文件。与顺序文件不同,文件中每个记录的长度是固定的,记录中的每个字段的长度也是固定的。在访问随机文件中的数据时,不必考虑各个记录的排列顺序或位置,可以根据需要直接访问文件中的任意记录。随机文件的每个记录都有一个记录号。在写入数据时,只要指定记录号,就可以把数据直接存入指定位置。反之,在读取数据时,通过记录号可以直接读取该记录。在随机文件中,可以同时进行读、写操作,因而能快速地查找和修改记录。适用于读写有固定长度记录结构的文本文件或二进制文件。,LOF函数 格式:LOF (文件号) LOF函数以字节为单
15、位返回用Open语句打开的文件大小,即文件的长度。“文件号”的含义同前。在Visual Basic中,文件的基本单位是记录,每个记录的默认长度是128个字节。因此,对于由Visual Basic建立的数据文件,LOF函数返回的将是128的倍数,不一定是实际的字节数。可以用FileLen获得未打开的文件长度。,EOF函数 格式:EOF(文件号) EOF函数用来测试文件的结束状态,即测试是否到达文件末尾。“文件号”的含义同前。对于顺序文件来说,如果已到文件末尾,则EOF函数返回True,否则返回False。对于随机文件,如果最后执行的Get语句未能读到一个完整的记录,则返回True,否则返回Fal
16、se。,(一)顺序文件一般来说,在以下条件下使用顺序文件(顺序访问数据文件): 不需要经常修改文件内容; 修改文件内容时,不需要跳跃文件内容位置; 只需要在文件末尾添加文件信息。 如果一个文件已经存在,则打开该文件,如果不存在,则建立该文件。,1.顺序文件的打开和关闭1)打开格式:Open For As # 功能:打开或建立指定的文件。 说明:1) 文件名是 所要打开的文件的名称,其中包含完整的路径名称。2) 模式指文件的打开方式,可以使以下三者之一:Input:以读方式打开文件。Output: 以写方式打开文件。Append: 以追加方式打开文件。3) 文件号是一个1511之间的整数,同时被
17、打开的每个文件的文件号不能相同。,例如:Open “A:D1.Dat” For Input As #1 Open “A:D2.Txt” For Output As #2,(2) 关闭顺序文件格式:Close # ,# 说明:1) 文件号是Open语句打开文件时指定的文件号。2) Close 语句可以同时关闭多个已打开的文件。例如Close #1Close #1,#2Close,2. 顺序文件的写操作以Output方式或Append方式打开顺序文件后,可以使用Print #语句或Write #语句向文件中写(输出)数据。 Print # 语句格式:Print # ,输出项列表功能:将各输出项的值
18、写入到指定的文件中。例如:P130,(2) Write #语句格式:Write # ,输出项列表功能:将各输出项的值写入到指定的文件中。说明:Write #语句的功能与Print #语句基本相同,主要区别是:1) Write #语句在各输出项之间自动插入逗号。2) Write #语句为字符串加双引号。3) Write #语句在将最后一个字符写入文件后会插入回车换行符,即Chr(13)+Chr(10)例如:P130,对比Print #语句和Write #语句的结果,可以看到: (1)Print # 语句在输出项中,用逗号分各输出项,则可以按分区格式输出,而用Write #语句虽然也用逗号分各输出
19、项,但是并不按分区格式输出,而是在输出项之间用逗号分隔,所以对于Write #语句而言,采用逗号分各输出项,还是分号分隔输出项,二者是没有差别的。 (2)Print #语句生成的数据文件,数据项之间没有引号;而Write #语句生成的数据文件,数据项自动地加上了引号。,3. 顺序文件的读以OpenFor Input As 方式打开顺序文件后,可以使用Input #语句、Line Input #语句或Input 函数从文件中读(输入)数据。(1) Input # 语句格式:Input # ,功能:从指定文件中读取数据并将其赋值给对应的变量。说明:1) 变量列表中的变量不能是数组或对象变量。2)
20、变量各输多于一个是,中间用逗号分隔。3) Input # 语句一般与Write #语句配合使用,也就是说,如果数据文件使用Write #写入生成的,那么应该用Input # 语句读取该数据文件。 例如 P131,(2) Line Input # 语句 格式: Line Input # , 功能:从指定文件中读出一行数据并将其赋值给字符串变量。 说明: Line Input # 语句一次从文件中读取一行数据,直到遇到回车符Char(13)或回车换行符Char(13)+Char(10)为止。 (2) Line Input # 语句一般与Print #配合使用。 例如:P132,(3) Input
21、函数格式:Input ,# 功能:从指定文件中读取指定个数的字符。说明:函数Input返回他所读出的所有字符,包括逗号、回车键、空白列、换行符、引号和前导空格等,(二)随机文件其每条记录的长度相等,且拥有一个唯一的记录号 可以随机地访问任一指定的记录,且对记录的读写操作也是可以随意选择的,随机文件的打开和关闭 (1)打开随机文件格式:Open For Random As # Len=记录长度 说明: 文件名是所要打开的文件的名称,其中包括完整的路径名称。 记录长度用于指定随机文件每条记录的长度。默认值为128字节,取值范围为032K字节,也可以在程序中用Len函数获得记录长度。 随机文件打开后
22、,既可以从文件中读取数据,也可以向文件中写入数据。 例如:Open “A:D2.Txt” For Random As #1 Len=Len(Student)(2) 关闭随机文件 同顺序文件采用Close,2. 随机文件的写操作 格式:Put # ,记录号, 功能:把变量中的数据写入指定文件中记录号指定的记录位置。 说明: 记录号是大于1的整数。 省略记录号时,新记录插入到当前记录之后。例如:P133,3. 随机文件的读操作 格式:Get # ,记录号, 功能:从指定文件中读去记录号指定的记录,并赋值给变量。例如:P135,(三)二进制文件 文件存取方式是以字节为单位对文件进行访问,允许程序读写
23、文的任何字节,不管是文本文件还是可执行文件,都可以二进制方式访问。打开二进制文件格式: OpenFor Binary As # 关闭二进制文件格式: Close语句二进制文件的写操作格式: Put # ,位置,变量名二进制文件的读操作格式: Get # ,位置,变量名,二、实例:将驱动器列表框(DriveListBox)、目录列表框(DirListBox)和文件列表框(FileListBox)等三个控件结合起来使用,并使其同步工作,以及利用它们对文件进行复制、重新命名、和删除的操作。解答:首先创建一个窗体,其属性Caption为“文件系统控制的使用”;一个文件列表框、目录列表框、驱动器列表框、
24、组合框;八个标签框四个命令按钮,属性分别为:“复制文件”、“重新命名”、“删除文件”、“结束操作”。各程序如下 ,(1)、装载窗体: Private Sub Form-Load ()Label8.Caption = DirList.Path End Sub (2)、保持各文件系统控件的同步: Private Sub DriveList-Change ()DirList.Path = DriveList.Drive End Sub Private Sub DirLIst-Change ()FileList.Path = DirList.PathLabel8.Caption + DirList.P
25、ath End Sub,(3)、选择文件名: Private Sub FileList-Click ()Label4.Caption = FileList.filenameIf Right$(DirList.Path,1)=“” ThenchoicedFile=DirList.Path+FileList.filenameElsechoicedFile = DirList.Path + “ ” + FileList.filenameEnd if End Sub,(4)、确定文件列表框的显示内容: Private Sub Combo1-Click ()FileList.Pattern = Comb
26、o1.Text End Sub,(5)、文件的复制: Private Sub cmdCopy-Click () Dim sourFile As string Dim destFile As string Str$ = “请输入复制目的文件” SourFile = choicedFile DestFile=inputBox$(str2$, “复制文件”)If destFile “” ThenFileCopy sourFile,destFileEnd if End Sub,(6)、文件重命名: Private Sub cmdRename-Click ()Dim oldName As StringD
27、im newName As StringTitle$ = “重新命名”Str0$ = “请再输入一遍需要修改的文件名(全路径)”Str1$=choicedFile+Chr$(10) + Chr(13)+str0$Str2$ = “请输入新文件名”OldName=inputBox$(str1$,Title$)Msg$=“确认被更改的文件名” & oldNameP=MsgBox(msg$ ,35, “数据检查框”),If p = 6 ThenNewName = InputBox(str2$,Title$)MsgBox “你的新文件名是:”+newNameEnd if End Sub,(7)、删除文
28、件: Private Sub cmdKill-Click ()Dim killedFile As StringKilledFile = choicedFileTitle$ = “数据检查框”Msg1$=“你要删除文件:” & killedFileX = MsgBox(msg1$,35,Title$) If x = 6 ThenKill killedFileEnd if End Sub,结论:本题的关键问题是注意如何保持各文件系统控件的同步,对其程序要有所理解。在文件的复制中要注意只有destFile不是空字符串时,FileCopy语句才能执行,FileCopy是VB提供的复制文件的语句,其一般格式为:FileCopy , 在文件重命名中要注意文件的重新命名与文件的复制一样容易,VB提供了一个Name语句为文件改名,它的一般格式为:Name As在VB中删除文件用Kill语句,它的一般格式为: Kill ,结束,