第六章文件管理程序设计中,文件是十分重要的,许多情况下,使用文件可以高效地解决实际问题。有用的数据在后备存储器上以文件的形式存储后,我们就可以通过文件对数据进行访问、操作以及检索,这称为文件管理。6.1文件的分类根据文件访问类型的不同,可以将文件分为三类:顺序文件、随机文件和二进制文件。(1)顺序文件所谓顺序文件就是普通的文本文件,是比较简单的文件结构,文件中的记录一个接一个地逐次存放,而且只知道第一个记录的存储位置,其它记录的位置用户无法知道。当用户需要查找一个数据时,只能从文件头开始,一个记录、一个记录地顺序读取,直到找到为止。(2)随机文件随机文件又称直接存取文件,简称随机文件或直接文件。与顺序文件不同,随机文件可以按任意次序读写,但要求每一行或每个记录的长度必须相同,而且每个记录都有一个记录号。在写入数据时,只要指定记录号,就可以把数据直接存入指定位置。而在读取数据时,只要给出记录号,就能直接读取该记录。(3)二进制文件二进制文件是以二进制方式保存的文件,VisualBasic假设数据不按照固定的方式组织,而且允许程序按照所需的方式访问文件。6.2文件的基本操作文件的基本操作包括文件的打开、文件的读写、文件的关闭文件的拷贝、文件的删除和文件的添加等。6.2.1文件的打开(建立)在VisualBasic中使用Open语句打开或建立一个文件,并指定一个文件号和文件的打开模式等。Open语句的格式如下:Open文件名For模式[Access存取类型][锁定]As[#]文件号[Len=记录长度]格式中的Open、For、As以及Len为关键字,带方括号的字段为可选项。其它参量含义如下:(1)文件名是必要的字符表达式,用以指定要打开或建立的文件名,该文件名可以包含目录、文件夹及驱动器。(2)模式用来指定文件的输入输出方式,可以为下述操作之一:Output:指定顺序输出方式。Input:指定顺序输入方式。Append:指定顺序输出方式。与Output不同的是,用Append方式打开文件时,文件指针被定位在文件末尾。如对文件进行写操作,则写入的数据附加到原来文件的后面,也称为追加。Random:指定随机存取方式。Binary:指定二进制方式文件,这种方式下,可以用Get或Put语句对文件中的任何字节位置的信息进行读写。如果没有指定文件的输入输出方式,则以缺省的Random方式打开文件。(3)Access是可选的关键字,说明对打开文件进行的操作种类,有Read(只读)、Write(只写)或ReadWrite(读/写)操作。“操作种类”指出了打开的文件中所进行的操作。如果要打开的文件已由其它过程打开,则不允许指定存取类型,否则Open出错,并产生出错信息。(4)[锁定]是可选的关键字,只用在多用户或多进程环境中,说明其它进程或用户能够完全共享)、LockRead(不允许其它进程读该文件)、LockWrite(不允许其它进程写该文件)和LockReadWrite(不允许其他进程读写该文件)对打开文件进行的操作,类型包括Shared(该文件。如果不使用Lock子句,默认为LockReadWrite。(5)文件号是必需的一个有效的文件号,范围在1到511之间。执行Open语句时,打开文件的文件号与一个具体的文件相关联,其它输入输出语句或函数通过文件号与文件发生关系。(6)记录长度是可选的小于或等于32767(字节)的一个数。对于随机访问方式打开的文件,该值就是记录长度。对于顺序文件,该值就是缓冲字节数,即确定缓冲区的大小,缓冲区越大,占用空间越多,文件的存取速度越快。Open语句兼有打开文件和建立文件两种功能。对一个数据文件进行读、写、修改或增加数据之前,如果文件名指定的文件不存在,用Input方式打开文件时,将提示“文件未找到”;用Append、Binary、Output或Random方式打开文件时,则建立相应的文件6.2.2文件的关闭文件的读写操作结束后,可以通过Close语句将Open语句打开的输入/输出文件关闭,一般格式为:Close[[#]文件号][,[#]文件号]…6.2.3文件的删除删除文件可以用Kill语句实现,具体格为:Kill文件名6.2.4拷贝文件用FileCopy语句可以把源文件拷到目标文件,拷贝后两个文件的内容完全一样,例如:FileCopy”Soure.dat”,“Target.dat”.6.2.5建立和删除文件目录在VB中可以通过MkDir语句建立一个目录,RmDir语句删除一个文件目录。6.2.6文件管理语句和函数1.FreeFile函数用FreeFile函数可以得到一个在程序中没有使用的文件号。一般格式为:FreeFile[(rangenumber)][例6-1]使用FreeFile函数获得文件号。2.FileLen函数此函数返回以“文件名”参数指定的文件的长度,单位为字节。3.Loc函数Loc函数返回在由文件号指定的文件中读写的位置。4.LOF函数LOF函数将返回指定文件的字节数。5.EOF函数EOF函数返回一个表示文件指针是否到达文件末尾的标志。一般格式为:EOF(Filenumber)文件指针如果到了文件末尾,EOF函数返回True(-1),否则返回False(0)。6.Dir函数Dir函数用来测试一个指定的路径下是否有指定的文件和文件夹(目录)6.3顺序文件6.3.1顺序文件的写操作顺序文件的写操作分为三步,即打开文件、写入文件和关闭文件,其中打开文件和关闭文件分别用Open语句和Close文件来完成,而写入文件,则要用到Print#或Write#语句来完成。1.Print#语句语句的一般格式如下:Print#文件号,[[Spc(n)|Tab(n)]][expression][charpos][例6-2]演示如何在指定目录下的文件中用Print#语句添加职工信息。2.Write#语句和Print#语句一样,用Write#语句可以把数据写入顺序文件中。它的语法格式如下:Write#文件号,[outputlist][例6-3]把一组学生的基本信息数据记录从键盘输入,并存入到C盘的Stu.dat文件中。学生的数据包括姓名、年龄、籍贯、系别,用一个记录类型来定义。6.3.2顺序文件的读操作顺序文件的读操作由Input#语句和LineInput#语句实现:1.Input#语句格式如下:Input#文件号,变量列表[例6-4]编程序演示从顺序文件中读取数据。2.LineInput语句使用LineInput语句可以从顺序文件中读取一个完整的行,并赋给一个字符串变量。具体格式如下:LineInput#文件号,字符串变量名[例6-5]将一个磁盘文件的内容读到内存,并在文本框中逐行显示出来。例如我们利用记事本建立一个名为“Sample.dat”的文件,并输入以下内容:文化似乎不直接关系国计民生,但却直接关系民族的性格、精神、意识、言语和气质。抽出文化这根神经,一个民族将成为植物人。该文件有四行,每行均用回车键结束。6.4随机文件随机文件跟数据库相似,被组织成记录(通常是相同长度的),并以固定长度的记录为单位进行存取,每一个数据项可以有不同的数据类型和宽度。6.4.1随机文件操作1.定义记录类型2.打开随机文件用Open语句打开随机文件的格式为:Openpathname[ForRandom]AsfilenameLen=reclength3.随机文件的读写操作随机文件的读操作用Get语句来完成,一般格式如下:Get#文件号,[记录号],变量随机文件的写操作通过Put语句来实现,一般格式如下:Put#文件号,[记录号],变量4.随机文件中记录的替换、增加与删除5.关闭文件6.5文件系统控件文件系统控件的作用是显示关于驱动器、目录和文件的信息,并从中选择以便进行进一步的操作。VB中提供了三种文件系统控件:驱动器列表框(DriveListBox)、目录列表框(DirListBox)和文件列表框(FileListBox)。利用它们的组合可以设计出各种处理文件的对话框程序。6.5.1驱动器列表框使用格式为:驱动列表框名称.Drive[=驱动器名]6.5.2目录列表框目录列表框的作用用来显示当前驱动器上的目录。它有一个在设计模式下不可用的Path属性,用来读取或指定当前工作目录。6.5.3文件列表框文件列表框的作用是显示当前目录的文件名。(1)Path属性(2)Pattern属性(3)FileName属性(4)MultiSelect属性(5)ListCount属性[例6-7]设计一图片浏览器,界面如图5-5所示。要求编写代码使驱动器列表框Drive1、目录列表框Dir1和文件列表框File1同步操作;文件列表框中只显示扩展名为Bmp和Jpg的图片文件;用鼠标点击文件列表框中的某个图片文件时,窗体上的图像框Image1同时显示该图片。6.6文件系统对象在VisualBasic6.0中新增加了文件系统对象(FileSystemObject),简称FSO。它提供了一套新的对文件系统进行管理和操作的方法和属性,使得对文件的管理更加简单。由于FSO不是VisualBasic的内部对象,而是Scripting类型库中的对象。因此,在使用此对象时必须先在工程中引用FSO对象。引用的方法是:从“工程”下拉菜单中执行“引用”命令,在打开的“引用”对话框中选中“MicrosoftScriptingRuntime”选项,即可将FSO对象模型引入到工程中了。6.6.1FileSystemObject对象FSO对象模型编程主要包括3项任务:创建一个FileSystemObject对象、对新创建的对象使用适当的方法、访问该对象的属性。1.创建FileSystemObject对象2.FileSystemObject对象的属性3.FileSystemObject对象的方法6.6.2Drive对象要使用Drive对象,首先要声明一个驱动器类型的变量,接着使用FileSystemObject对象的GetDrive方法来返回一个Drive对象,再通过驱动器变量的属性来获得所需信息。[例6-8]查看驱动器信息6.6.3Folder对象[例6-9]编写一个文件夹管理程序,用于创建或删除文件夹,还可以对文件夹进行更名操作。6.6.4File对象6.6.5数据文件的创建以及读、写方法