VB教程第8章-文件操作.ppt_第1页
VB教程第8章-文件操作.ppt_第2页
VB教程第8章-文件操作.ppt_第3页
VB教程第8章-文件操作.ppt_第4页
VB教程第8章-文件操作.ppt_第5页
免费预览已结束,剩余28页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

文件是存储在外部介质(如磁盘)上的以文件名标识的数据的集合。存储在磁盘上的文件称为磁盘文件,与计算机相连的设备称为设备文件。这些文件都不在计算机内,统称为外部文件。为访问存放在外部介质上的数据,应先按文件名找到所指定的文件,然后再从该文件中读取数据。,第8章文件,8.1文件的基本概念,8.2文件的打开与关闭,8.3文件的读写操作,8.4常用的文件操作语句和函数,8.5文件系统控件,退出,8.1文件的基本概念,8.1.1文件说明文件说明指的是文件的命名规则,在VB中,文件说明的一般形式为:设备名:文件所在的路径名文件引用名,在VB中,文件说明没有大小写之分。,8.1.2文件结构和分类,1文件结构,字符是构成文件的最基本单位。,字段或域由若干个字符组成,用来表示一项数据。,记录就是一组有相互关系的字段。,文件是记录的集合。,表8-1用户电脑购置清单,2文件种类,(1)顺序文件,文件中的数据是按顺序组织的文本行,每行(即一个记录)的长度可以变化,用“换行”字符作为分隔符号。在顺序文件中,只知道第一个记录的存放位置,其他的记录无从知晓。当要查找某项数据时,只能从文件的开头,一个记录一个记录的顺序查找,直到找到所需记录为止。,在VB中,按照文件的存取方式和组成,把文件分为顺序文件、随机文件和二进制文件,在这三类文件中,数据的存取方法是不同的。,(2)随机文件,随机文件有时又称随机存取文件或直接存取文件,是由一组长度相等的记录组成的,一般它们以二进制形式存放,每个记录包含一个或多个字段。如果是只有一个字段的记录,可以是任何一种标准数据类型,如整数或者定长字符串。如果具有多个字段的记录,则该记录对应于用户自定义类型。对于随机文件,可以根据文件中的记录号访问任何一条记录,无须按顺序进行。,在随机文件中,每个记录是固定的,记录中每个字段的长度也是固定的,且每个记录都有一个记录号,读写数据时,只需指定记录号即可,且可以同时进行读写操作,数据的存取灵活、方便、速度快,但是占用的空间大、数据组织复杂。,二进制文件,根据数据的编码方式,文件可以分为ASC文件和二进制文件。ASC文件即文本文件,这种文件以ASC方式保存文件,可以使用字处理软件建立和修改,但必须以纯文本方式保存。二进制文件以二进制方式保存文件,以字节数来定位数据,没有固定的格式,允许程序按所需的任何方式组织和访问数据,对文件中的各个字节数据进行存取访问和改变。二进制文件不能用普通的字处理软件进行编辑,但占用的空间较小。,任何形式的文件都可以使用二进制模式进行访问。,8.2文件的打开与关闭,8.2.1文件的打开,8.2.2文件的关闭,返回,退出,8.2.1文件的打开,在VB中,使用Open语句打开或建立文件,为文件的输入输出分配缓冲区,并确定缓冲区所使用的存取方式,其语法格式为:,Open文件说明For方式Access存取类型锁定As#文件号Len=记录长度,其中:,“文件说明”:必要,字符串表达式,指定文件名,该文件名可能还包括目录、文件夹及驱动器。,Access:可选。关键字,说明打开的文件可以进行的操作,有只读、只写和读/写操作。,“方式”:必要,关键字。,“锁定”:可选。关键字,说明限定于其它进程打开的文件的操作。,“记录长度”:可选。小于或等于32767(字节)的一个数。对于用随机访问方式打开的文件,该值就是记录长度。对于顺序文件,该值就是缓冲字符数。,以下是使用Open语句的不同用法来实现文件的输出与输入的范例。(1)以顺序输入模式打开client1文件,若要以其他方式打开文件,必须先关闭文件。Openclient1ForInputAs#1(2)以只写的二进制方式打开文件。若要以其他方式打开文件,必须先关闭此文件。Openclient1ForBinaryAccessWriteAs#1(3)下列代码以随机方式打开client1文件,文件中含有用户自定义数据类型Record的记录。若要以其他方式打开文件,必须先关闭此文件。TypeRecord定义用户自定义数据类型。clientIDAsIntegerclientNameAsString*16EndTypeDimMyRecordAsRecord声明变量。Openclient1ForRandomAs#1Len=Len(MyRecord)(4)下列代码以顺序输出方式打开文件,任何过程都可以读写该文件。若要以其他方式打开文件,必须先关闭此文件。Openclient1ForOutputSharedAs#1(5)下列代码以只读的二进制方式打开文件;其他过程不可以读该文件。Openclient1ForBinaryAccessReadLockReadAs#1(6)用随机方式打开C盘上clients文件夹下的client1文件,记录长度为512字节。Openc:clientsclient1ForRandomAs#1Len=512,8.2.2文件的关闭,Close语句用于关闭使用Open语句所打开的输入/输出文件。其语法格式为:,Close#文件号,#文件号,若省略Close关键字后的内容,则将关闭Open语句打开的所有活动文件。,即使没有Close语句,当程序结束时,也将自动关闭所有打开的文件。但是Close语句还是必要的,如果不使用Close语句,可能会使得某些需要写入的数据不能从内存写入文件中。当打开的文件或设备正在输出时,执行Close语句并不会使输出信息的操作中断。,8.3.1顺序文件的读写操作,1.写操作,顺序文件的写操作使用Print#语句或Wrie#语句实现。,(1)Print#语句,格式:Print#文件号,outputlist,功能:将格式化显示的数据写入顺序文件中。,8.3文件的读写操作,例8-1Print#语句实例:使用Print#语句将数据写入一个文件Openc:src.txtForOutputAs#1打开输出文件Print#1,学生成绩表将文本数据写入文件Print#1,将空白行写入文件。Print#1,姓名;Tab;成绩;Tab;备注数据写入三个区Print#1,王维;95以空格隔开两个字符串Print#1,黄梅;0;下一个Print#语句将不换行Print#1,Spc(15);舞弊在字符串之前写入十五个空格Print#1,Tab(5);输入完毕!在第5列输出字符串Close#1如果要将文本框的内容一次性写入文件中,可以采用如下方法:Openc:Mytext1.txtForOutputAs#1Print#1,Text1.TextClose#1如果要将文本框的内容逐字地写入文件中,可以采用如下方法:Openc:Mytext2.txtForOutputAs#1Fori=1toLen(Text1.Text)Print#1,Mid(Text1.Text,i,1)NextiClose#1,图8-1Print#语句输出的内容,(2)Write#语句,格式:Write#文件号,outputlist,功能:将数据写入顺序文件。,与Print#语句不同,当要将数据写入文件时,Write#语句会在数据项之间插入逗号,并加上双引号,没有必要在列表中键入明确的分界符。Write#语句在将outputlist中的最后一个字符写入文件后会插入一个新行字符,即回车换行符,(Chr(13)+Chr(10)。,图8-2Write#语句输出的内容,2.读操作,(1)Input#语句,格式:Input#文件号,变量列表,功能:从已打开的顺序文件中读出数据,并将数据指定给用逗号分界的变量列表中的变量。,(2)LineInput#语句,格式:LineInput#文件号,字符串变量,功能:从已打开的顺序文件中读出一行并将它分配给字符串变量。,(3)Input函数,格式:Input(读取的字符数,#文件号),功能:读取以Input或Binary方式打开的文件中的指定数目的字符。,例8-2:将图8-2中所示文本读到文本框中:PrivateSubCommand1_Click()Text1.Text=Openc:src.txtForInputAs#1DoWhileNotEOF(1)LineInput#1,mydataText1.Text=Text1.Text+mydata+vbCrLfLoopClose#1EndSub,如果将代码进行如下改动,则可以将文件的内容逐字符地读入文本框中。运行结果同图8-3。PrivateSubCommand1_Click()Text1.Text=Openc:src.txtForInputAs#1DoWhileNotEOF(1)inputdate=Input(1,#1)Text1.Text=Text1.Text+inputdateLoopClose#1EndSub,图8-3将顺序文件的内容读到文本框中,则程序运行时,单击Command1按钮,文本框中显示的内容见图8-3所示。注意设计时将Text1的MultiLine属性设置为True。,8.3.2随机文件的读写操作,1.写操作,随机文件的写操作使用Put语句,其功能为将一个变量的数据写入磁盘文件中,语法格式为:,Put#文件号,recnumber,varname,2.读操作,随机文件的读操作使用Get语句,其功能是将一个已打开的磁盘文件的一条记录的内容读入一个变量之中。语法格式为:,Get#文件号,recnumber,varname,3.随机文件操作实例在上面顺序文件的实例2中,每次新建用户窗口后,变量clientnumber都清空,保存每个窗口中文本框的内容时,并没有用到变量clientnumber,而是将整个文本框的内容整体写到文件中,这样很不方便以后的查找等操作。可以这样修改程序:每次单击子窗口上的“新建”菜单项时,将提示是否保存用户选择,如果需要保存,则调用保存过程saver将clientnumber变量保存在随机文件中,然后清除文本框并将变量clientnumber清零,如果不必要保存,则直接并将变量clientnumber清零,清空文本框。为程序增加查找功能。(1)将父窗体“新建”菜单单击事件代码改为:PrivateSubNew_Click()Form1.showEndSub(2)将子窗体“新建”菜单单击事件代码改为:PrivateSubNew_Click()clientnumber.clientname=:clientnumber.clientcpu=:将所有记录变量清空Flag=MsgBox(要保存用户资料吗,vbYesNoCancel)SelectcaseFlagCasevbYes:Savepro调用Savepro过程保存客户资料Text1=CasevbNoText1=EndSelectEndSub,(3)将savepro过程代码改为:PublicSubsavepro()MDIForm1.CommonDialog1.ShowOpenFileName=MDIForm1.CommonDialog1.FileNameOpenFileNameForRandomAs#1Len=Len(clientnumber)将记录变量clientnumber写入文件recordnumber=LOF(1)/Len(clientnumber)+1Put#1,recordnumber,clientnumberClose#1EndSub(4)编写查询过程(即“编辑|查找”菜单项单击事件)代码:PrivateSubTsearch_Click()DimnameAsStringname=Trim(Box(输入要查找的客户姓名:)MDIForm1.CommonDialog1.ShowOpenFileName=MDIForm1.CommonDialog1.FileNameOpenFileNameForRandomAs#1Len=Len(clientnumber)recordnumber=LOF(1)/Len(clientnumber)+1Fori=1TorecordnumberGet(1),i,clientnumberIfTrim(clientnumber.clientname)=nameThentextlist找到查找的客户,调用textlist过程在Form1的文本框中显示客户信息ExitFor退出循环EndIfNextClose#1IfirecordnumberThenMsgBox(没有您要查找的客户资料!)找不到要查找的客户信息EndSub,1.FileCopy语句,格式:FileCopysource,destination,功能:复制一个文件。,FileCopy语句不能复制一个已打开的文件,如果想要对一个已打开的文件使用FileCopy语句,则会产生错误。,例如:将含有数据的文件C盘下client1中的内容复制为到文件D盘下的oldclient1中:DimSourceFile,DestinationFileSourceFile=C:client1指定源文件名。DestinationFile=D:oldclient1指定目的文件名。FileCopySourceFile,DestinationFile将源文件的内容复制到目的文件中。,8.4常用的文件操作语句和函数,2.Kill语句,格式:Killpathname,功能:从磁盘中删除文件。,例如:PrivateSubCommand1_Click()h=MsgBox(确实要删除文件吗?,vbYesNo,请确认)Ifh=vbYesThenKillc:client1.txtEndSub,3.Name语句,格式:NameoldpathnameAsnewpathname,功能:重新命名一个文件、目录、或文件夹。,Name语句不能创建新文件、目录或文件夹。,如果在一个已打开的文件上使用Name,将会产生错误。必须在改变名称之前,先关闭打开的文件。,如果newpathname所指定的路径存在且与oldpathname指定的路径不同,则Name语句将文件移动到新的目录下,但不能将文件移动到不同的驱动器中。,例如:Namec:client1.txtAsc:client2.txt将文件client1.txt更名为client2.txtNamec:client2.txtAsc:Newclient3.txt将文件C盘下的client2.txt移动到C盘的New文件夹中并更名为client3.txt,4.ChDrive语句,格式:ChDrivedrive,功能:改变当前驱动驱的位置,字符串表达式drive的首字符指定将要改变到的驱动器名称。,5.ChDir语句,格式:ChDirpath,功能:改变默认目录位置,字符串表达式path指定将要改变到的默认目录名称。改变默认目录并不改变默认驱动驱。,6.MkDir语句,格式:MkDirpath,功能:创建一个新的目录。,7.RmDir语句,格式:RmDirpath,功能:删除一个存在的、空的目录。,8.Loc函数,格式:Loc(),功能:返回一个Long型数,返回由文件号指定的文件的当前读/写位置。Filenumber为Open语句中使用的文件号。,9.LOF函数,格式:LOF(),功能:返回一个Long型数,表示用Open语句打开的、文件号filenumber所对应的文件的大小,该大小以字节为单位。,对于尚未打开的文件,可以使用FileLen函数得到其长度。例如:在C盘下的文件client1中含有数据:ThisIsclient1sInformation,程序运行时单击Command1命令按钮,将在窗体上显示数据33(号为2字节)。PrivateSubCommand1_Click()DimFileLengthOpenc:client1ForInputAs#1打开文件。FileLength=LOF(1)取得文件长度。Close#1关闭文件PrintFileLengthEndSub,10.EOF函数,格式:EOF(filenumber),功能:返回Boolean值True或False,表明是否已经到达为以随机方式或顺序方式打开的文件的结尾。,EOF函数的一般用法为:DoWhileNotEOF(filenumber)读/写操作Loop,8.5文件系统控件,文件系统控件有三种:驱动器列表框(DriveListBox)、目录列表框(DirListBox)和文件列表框(FileListBox)。,图8-4驱动器列表框、目录列表框和文件列表框应用实例,1.重要属性,表8-2列出了三个文件系统控件的重要属性。,在表8-2列出的属性中,FileName和Pattern属性可以在设计时进行设置。在运行时Pattern属性的值的改变将产生一个Pattern_Change事件。Drive和Path属性只能在运行时加以引用和设置,在设计时则不能进行设置。在运行时Path属性的值的改变将产生一个Path_Change事件。引用FileName时只能返回选定的文件名,只有加上Path属性才能得到完整的文件路径。,表8-2文件系统控件的重要属性,表8-3文件系统控件的重要事件,2.重要事件,3.文件系统控件应用实例图8-6所示应用程序的功能是:三个文件系统控件是同步的,即选择驱动器列表框中的驱动器时,在目录列表框中显示当前驱动器下的文件夹,在文件列表框中显示目录列表框中打开的文件夹中的文件。组合框控件用于限制文件列表框显示的文件类型。当单击文件列表框的文件名时,在右下的列表框中显示文件列表框中选定的文件名称。当双击文件列表框的可执行文件名时,将运行双击的文件。(1)界面设计根据要求,在Form1窗体上绘制三个文件系统控件:驱动器列表框控件Drive1、目录列表框控件Dir1和文件列表框控件File1,一个组合框控件Combo1和一个标签控件La

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论