主页程序中经常需要将大量数据信息作为数据文件存储在磁盘上。VB可以处理三种类型的数据文件,即顺序文件、随机文件和二进制文件,并且提供了与文件处理有关的控件。主页文件是指存放在外存储器(如磁盘)上的信息集合两大类文件:程序文件和数据文件可以将应用程序所处理的数据以文件的形式保存起来本章主要内容第8章数据文件与文件管理数据文件概述数据文件文件系统控件文件基本操作文件系统对象(FSO)退出磁盘数据文件内存通过程序来实现数据存取操作程序文件主页8.1.1数据文件的基本结构1.数据文件的结构数据文件由记录组成,记录由字段组成,字段由字符组成记录1数据文件记录2…………学号姓名951001张三…学号姓名951002李四…字段8.1数据文件主页(1)顺序文件:文本文件。文件中的记录按顺序一个接一个地排列。只能按记录的先后顺序进行存取。(2)随机文件:随机文件的每一个记录都有固定的长度,每一个记录都有记录号,这种文件的特点是允许用户存取文件中任一个记录。可以同时进行读或写操作存入和读出速度较快,数据容易更新(3)二进制文件:可理解为长度为1的特殊的随机文件2.文件类型记录1记录2记录3……按记录顺序进行存取操作记录1记录2记录3……允许存/取任一个记录如存入记录3,再读取记录2主页(1)打开(或新建)文件(2)进行读、写操作系统设置文件指针,用来记住当前读写的位置(3)关闭文件3.文件处理的一般步骤主页1.打开文件(Open)Open文件名[For模式][Access存取类型][锁定]As[#]文件号[Len=记录长度]说明:模式用于指定文件访问的方式,包括:Append——从文件末尾添加Binary——Input——顺序输入Output——Random——随机存取方式文件号(或称文件缓冲区):1~511的整数长度Len:用来指定每个记录的长度(字节数)示例:Opend:\cj1.datForOutputAs#12.关闭文件(Close)打开的文件使用完后必须关闭。Close[#]文件号1[,[#]文件号2…]]示例:Close#14文件的打开和关闭主页1.顺序文件的写入操作以Output或Append方式打开文件使用Write#语句或Print#语句将数据(一个不定长记录)写入文件中2.顺序文件的读出操作以Input方式打开文件采用Input#或LineInput#语句从文件中读出数据8.1.2顺序文件Input或LineInput磁盘Write或Print顺序文件内存写入数据读出数据格式:Write#文件号[,表达式表]Input#文件号,变量名表主页把1~50的50个整数,以及这些数中能被7整除的数分别存入两个文件中,文件名为num1和num2,文件存放在VB缺省文件夹下PrivateSubForm_Load()Opennum1.txtForOutputAs#1Opennum2.txtForOutputAs#2Fori=1To50Write#1,iIfiMod7=0ThenWrite#2,iNextiClose#1,#2UnloadMeEndSub说明:num1.txt文件中一共写入50个记录,而num2.txt文件只写入其中能被7整除的若干个记录例8.1把1~50各数及能被7整除的数分别存入两个文件中例8.1主页已知文件“num2.txt”中存放一批能被7整除的数(见例8.1),现要求把这些数显示出来。每行显示4个数。PrivateSubForm_Load()ShowOpennum2.txtForInputAs#1DoWhileNotEOF(1)'文件未结束时,循环Input#1,xPrintxLoopClose#1EndSub例8.2从文件“num2.txt”中读取数据例8.2主页随机文件中每一个记录定长,并设置记录号(从1开始)。存取记录时,只要说明所需记录的编号,系统就以此算出记录所在位置(1)使用Type…EndType语句定义一个记录类型,该类型包括多个数据项,并与文件中记录应包括的域一致。(2)指定Random类型打开文件,记录定长,打开文件后,就可以存或取任一个记录。(3)分别通过Get和Put语句,并指定记录号进行读一个记录或存一个记录8.1.3随机文件Put记录磁盘随机文件内存写入数据读出数据Get记录格式:Get#文件号,[记录号],变量Put#文件号,[记录号],变量主页例8.5建立一个随机文件,文件中包含10个记录,每个记录由一个数(1至10)的平方、立方和开方根三个数值组成,以该数作为记录号。存入全部记录后,再读出其中3个记录。(1)通过Type...EndType语句定义记录类型:PrivateTypeNumval‘定义一个Numval类型的变量nvSqureAsIntegerCubeAsLongSqrootAsSingleEndTypeDimnvAsNumval‘定义一个Numval类型的变量nv(2)利用某一过程(本例采用事件过程Form_Load)来完成该随机文件的存取操作,程序代码如下:例8.5主页PrivateSubForm_Load()DimnvAsnumval'定义一个numval类型的变量nu'写入记录程序段Opendata1.datForRandomAs#1Len=Len(nv)Fori=1To10nv.squre=i*inv.cube=i*i*inv.sqroot=Sqr(i)Put#1,i,nvNextiClose#1'读出记录程序段ShowOpendata1.dat“ForRandomAs#1Len=Len(nv)Fori=2To10Step4'只读出3个记录Get#1,i,nvPrint第;i;号记录:,nv.squre,nv.cube,nv.sqrootNextiClose#1EndSub主页运行结果:第2号记录481.414214第6号记录362162.44949第10号记录10010003.162278主页二进制文件的存取方式与随机文件存取方式类似,读写语句也是Get和Put,区别在于二进制文件的存取单位是字节,而随机文件的存取单位是记录。与随机文件一样,二进制文件一旦打开,就可以同时进行读写。例8.6把两个字符串写入二进制文件“biny.dat”,从位置50起写入第一个字符串“VisualBasic”,从位置100起写入第二个字符串“程序设计教程”。Openbiny.datForBinaryAs#1txt1=VisualBasictxt2=程序设计教程Put#1,50,txt1Put#1,100,txt2Close#18.1.4二进制文件主页可以在应用程序中很方便地对文件和文件夹进行操作(1)建立文件夹语句(MrDir):MkDir[路径]文件夹名示例:MkDirD:\VB\Temp(2)改变当前驱动器(ChDrive):(3)改变当前文件夹语句(ChDir):ChDir路径示例:ChDirD:\VB\Dat(4)删除文件夹语句(RmDir)(5)删除文件语句(Kill)(6)拷贝文件语句(FileCopy)(7)文件的改名和移动(Name)(8)文件查找函数(Dir)8.2文件基本操作主页在“我的文档”(C:\MyDocuments)文件夹下创建一个新文件夹“mydir”,然后复制文件“C:\MyDocuments\cj2.txt”到新文件夹下,复制生成的文件名称由用户指定PrivateSubForm_Load()ShowPrint正在进行文件操作MkDirc:\mydocuments\mydirfname=InputBox(请输入新文件名,更改文件名)fname=c:\mydocuments\mydir\+fname+.txtFileCopyc:\mydocuments\cj2.txt,fnamePrint已完成要求的操作EndSub例8.7文件操作示例例8.7主页(9)调用应用程序格式:Shell(命令字符串[,窗口类型])功能:调用指定应用程序示例:x=Shell(C:\Windows\Explorer.exe,1)执行“C:\Windows”文件夹下的应用程序Explorer.exe,并显示该程序窗口主页文件系统对象(FSO,FileSystemObject)模型是VB6.0的新增功能,用于对文件系统进行管理。它通过一种基于对象的方式,使用户在编程时可以通过这些对象提供的属性和方法来处理文件和文件夹。8.3.1FSO对象模型FSO对象模型提供了一组对文件系统的驱动器、文件夹和文件进行管理的对象,其主要对象有:·Drive对象·Folder对象·Files对象·FileSystemObject对象·TextStream对象8.3文件系统对象(FSO)主页使用FSO对象模型编程的主要步骤:①创建一个FileSystemObject对象;②使用适当的方法生成用于管理的对象(如Files、Folder);③访问对象的属性,以获取文件系统的信息或进行相关操作。(1)创建FSO对象FSO对象模型包含在一个称为Scripting的类型库中,此类型库位于Sctrun.Dll文件中。先要引用此文件创建FileSystemObject对象主要有两种方法:①使用New关键字,将一个变量声明为FileSystemObject对象,例如:DimfsoAsNewFileSystemObject②使用CreateObject函数创建一个FileSystemObject对象,例如:Setfso=CreateObject(scripting.filesystemobject)主页(2)FSO对象方法完成了FSO对象模型的创建之后,就可以利用创建的FSO对象模型的方法访问各个对象的属性来获取所需信息或进行相关操作了。例如,要访问D盘根文件夹下已有文件myfile0.txt,可以使用如下代码:DimfsoAsNewFileSystemObject,filAsFileSetfil=fso.GetFile(“D:\myfile0.txt”)(3)访问对象的属性使用Get方法之后,就可以访问对象的属性。例如,要显示一个文件的所占磁盘空间大小,可以使用如下代码:DimfsoAsNewFileSystemObject,filAsFileSetfil=fso.GetFile(“D:\myfile0.txt”)Print“文件所占磁盘空间”;fil.size主页1.管理驱动器2.管理文件夹3.管理文件例8.8设计一个试题发放的小程序,用于给“D:\考堂”文件夹下的指定学号文件夹中发放文件“试题.mdb”,然后设置该文件的属性。具体要求如下:(1)检测“D:\考堂”文件夹下的学号“06031001”~“060310099”范围内哪些学号文件夹存在,若存在,则按(2)发放文件“试题.mdb”。(2)对于已存在的学号文件夹,检测该文件夹下是否存在文件“试题.mdb”,若不存在,则将当前文件夹下的“试题.mdb”文件复制到该学号文件夹下;若已存在,则先删除原有的“试题.mdb”文件后再复制文件。(3)将复制到各个学号文件夹下的“试题.mdb”文件属性设置为“系统”和“隐藏”。8.3.2使用FSO对象管理文件主页DimfsoAsNewFileSystemObject'创建一个FileSystemObject对象DimfilAsFile'将Fil声明为File对象类型exdir=D:\考堂Fork=6031001To6031099'数值范围xhdir=exdir+“0”+Trim(Str(k))‘学号文件夹名(含路径)Iffso.FolderExists(xhdir)Then'判断学号文件夹是否存在xhfile=xhdir+\试题.mdbIffso.FileExists(xhfile)Then'判断学号文件夹下是否存在文件试题.mdbfso.DeleteFilexhfile'删除原有文件EndIffso.CopyFile试题.mdb,xhfile'将试题.mdb复制到学号文件夹下Setfil=fso.GetF