![《Visual Basic程序设计案例教程》课件第10章_第1页](http://file4.renrendoc.com/view14/M00/2F/23/wKhkGWdz2s-ASliCAACUrtgI0cg795.jpg)
![《Visual Basic程序设计案例教程》课件第10章_第2页](http://file4.renrendoc.com/view14/M00/2F/23/wKhkGWdz2s-ASliCAACUrtgI0cg7952.jpg)
![《Visual Basic程序设计案例教程》课件第10章_第3页](http://file4.renrendoc.com/view14/M00/2F/23/wKhkGWdz2s-ASliCAACUrtgI0cg7953.jpg)
![《Visual Basic程序设计案例教程》课件第10章_第4页](http://file4.renrendoc.com/view14/M00/2F/23/wKhkGWdz2s-ASliCAACUrtgI0cg7954.jpg)
![《Visual Basic程序设计案例教程》课件第10章_第5页](http://file4.renrendoc.com/view14/M00/2F/23/wKhkGWdz2s-ASliCAACUrtgI0cg7955.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章文件
10.1顺序文件10.2随机文件10.3二进制文件10.4与文件系统相关的控件习题使用文件是长久保存数据的有效且简便的方法。文件是存储在某种存储介质上的数据的集合,通常由一组相关字节组成。当应用程序要访问文件时,必须自己决定文件中字节的意义(比如,表示字符、字符串、整数、数据记录等)。文件在存储介质上的位置是依赖于驱动器名、文件夹(目录)和文件名来定位的。
VisualBasic提供了对文件的读写能力。为能有效地存取数据,访问文件时,应根据文件中存储的数据的不同类型,采用不同的方法进行访问。VisualBasic中有三种文件访问类型。●顺序型:用于读写连续的文本文件。●随机型:用于读写有固定长度记录结构的文本文件或者二进制文件。●二进制型:用于读写任意结构的文件。
VB中,根据文件的结构和访问方式,将文件分成顺序文件、随机文件和二进制文件。文件处理可以通过使用Open语句以及其他一些相关的语句和函数来实现,也可以通过使用FSO对象模型来实现。应用程序访问上述三种文件的步骤是相同的:①使用Open语句打开文件;②从文件中读取数据或将数据写到文件中;③使用Close语句关闭文件。10.1顺序文件
VisualBasic6.0中,顺序文件实际上指的就是文本文件,这种文件中的数据由文本字符组成。这些字符既可以是ASCII码字符集中的可显示字符,也可以是汉字字符。顺序文件按行组织,每一行的结尾由“回车”和“换行”字符指示。“回车”字符的ASCII码为13,“换行”字符的ASCII码为10。当用户要处理只包含文本的文件时,最好使用顺序型访问。顺序型访问不太适合有很多数字的文件,因为每个数据都要按字符串存储,可能比较浪费存储空间。如一个4位整数将需要4个字节的存储空间,而它作为一个正数来存储时只需2个字节。案例1顺序文件的使用
1.学习目标设计一个演示顺序文件读写操作的程序,程序运行界面如图10.1所示。要求该程序可以打开一个顺序文件“D:\text.txt”,并将其内容读入文本框中进行修改,然后将修改好的内容保存回原文件。图10.1顺序文件程序设计界面
2.相关知识如果要编辑一个顺序文件,需要先打开该文件,再把它的内容读入到程序变量,然后改变这些变量,最后再把这些变量写回到该文件。
1)顺序文件的打开使用顺序文件之前,应先用Open语句打开它。Open语句的语法如下:
OpenpathnameFormode[access][lock]As[#]filenumber[Len=reclength]其中各参数的含义如下:● pathname:必选参数,由字符串表达式组成。它指定文件名,该文件名可能还包括目录、文件夹及驱动器。●mode(模式):必选参数,它指定文件的打开方式。对顺序文件有Append、Input和Output三种模式,其含义如表10.1所示。如果未指定方式,则以Random访问方式打开文件(随机文件)。表10.1顺序文件的三种打开模式当用Input模式打开顺序文件时,该文件必须存在,否则会出现错误。但是,当以Output或Append模式打开一个不存在的文件时,Open语句会首先创建该文件,然后再打开它。● access:可选参数,它说明对打开的文件可以进行的操作类型,即能对文件进行哪种操作,对文件的存取限定了约束条件。表10.2列出了顺序文件的操作类型。表10.2顺序文件的操作类型●lock(锁定):可选参数,它说明其他进程能否对打开的文件进行操作,用于多进程网络环境中。lock类型可采用的参数如表10.3所示。表10.3Lock类型可采用的参数● filenumber:必选参数,它是一个有效的文件号。文件号是在Open语句中用来标识打开文件的数值,范围为1~511。当打开某文件并为其指定文件号以后,该号就代表了被打开的文件,任何对该文件号进行操作的语句都将影响相应的文件内容,文件被关闭后,此文件号可以再供其他文件使用。为了保证应用程序不使用正在使用的文件号,可以使用FreeFile()函数得到下一个可用的文件号。●reclength:可选参数,它是小于或等于32 767(字节)的一个数,它指定用于数据交换时数据缓冲区的大小。对于顺序文件,该值就是缓冲字符数;对于用随机访问方式打开的文件,该值就是记录长度。在Windows中,数据要存储到文件中时,不是直接存到磁盘上,而先存到一个内存里的数据缓冲区中,直到装满后才存盘或当文件关闭时一起存盘。用户可在打开文件时设定参数,修改系统设置。较大的参数表示数据占用较大的内存空间,但可提高文件的输入或输出速度;该参数较小时,表示数据占用空间小,文件的交换速度较慢。例如,以顺序输入模式打开Textnew.txt文件可用下列语句实现:
Open"Textnew.txt"ForInputAs#1
2)向顺序文件中写数据应用程序在向顺序文件中写入数据前,应先根据是否要覆盖原文件来选择以Output或Append模式打开它。当以Output模式打开文件时,写操作语句从数据文件的最前面开始写入。如果文件已存在,则文件中原来的内容会被覆盖;若文件不存在,则会建立一个新文件,将数据从头开始写入。当文件以Append模式打开时,如果文件已经存在,则在写入数据时不会将原来的数据覆盖,而是从文件末尾开始,将新数据添加到文件中。下面两种语句可实现向顺序文件中写入数据的操作。
(1) Write#语句。功能:将数据写入文件号指定的顺序文件。每执行一次Write语句,该语句就会在输出的数据后面自动添加一个回车换行字符。语法格式:
Write#filenumber,[outputlist]其中,outputlist参数是可选项,代表要写入文件的数值表达式或字符串表达式,表达式间用逗号分开。如果省略outputlist,并在filenumber之后加上一个逗号,则会将一个空白行输出到文件中。例如:用Write#语句将行数据写入顺序文件。
Open"Testnew.txt"ForOutputAs#1 '打开输出文件
Write#1,"向顺序文件中写入数据",100 '写入以逗号隔开的数据
Write#1, '写入空白行
(2) Print#语句。功能:将格式化显示的数据写入顺序文件中。语法格式:
Print#filenumber,[outputlist]例如:用Print# 语句将数据写入一个文件。
Open"Test.txt"ForOutputAs#1 '打开输出文件
Print#1,"顺序文件" '将文本数据写入文件
Print#1,'将空白行写入文件
Print#1,Spc(5);"向顺序文件中写入数据"
'在字符串之前写入5个空格与Print# 语句不同,当要将数据写入文件时,Write# 语句会在项目和用来标记字符串的引号之间插入逗号。Write#语句在将“outputlist”中的最后一个字符写入文件后插入一个新行字符,即回车换行符(Chr(13)+Chr(10))。
3)从顺序文件中读数据要读取顺序文件中的内容,应用Open语句以Input模式打开该文件,然后根据用户的不同需要,使用Input# 语句或LineInput# 或Input()将文件内容读入到程序变量中。
(1) Input# 语句。功能:Input # 语句将文件中的逗号(不包括引号中的逗号)和回车换行符作为数据项的分隔符,顺序地从指定的文件(由文件号指定)中读取数据,并把读出的数据存放到参数表指定的变量中。语法格式:
Input#filenumber,varlist其中,参数varlist为变量表,这些变量不能是数组或对象变量,变量间用逗号分隔开。Input#语句将从文件中读出的值分配给这些变量,一次读取的数据项的个数与varlist中变量的个数相等,顺序必须相同,且与相同数据类型的变量匹配。如果变量为数值类型,而数据不是数值类型,则指定变量的值为零。当文件中余下的数据项的个数多于参数表中变量的个数时,Input # 语句读出相应个数的数据项,并把文件指针移动到下一个数据项上;当文件中余下的数据项的个数少于Input#语句参数表中变量的个数时,再次执行Input # 语句将导致错误。为了避免发生这种情况,在使用Input# 语句读取数据之前,应该使用EOF()函数判断是否已经读到了文件的末尾。当已经读到文件末尾时,EOF()函数返回True,否则返回False。
EOF()函数的语法格式:
EOF(filenumber)为了能够用Input # 语句将文件的数据正确读入到变量中,在将数据写入文件时,要使用Write#语句而不是Print#语句。因为使用Write#语句可以确保将各个单独的数据域正确分隔开,所以可用Input# 语句再将数据读出来。例如:用Input # 语句将顺序文件Testnew.txt内的数据读入到两个变量中。假设Testnew.txt文件内含数行以Write # 语句写入的数据,即每一行数据中的字符串部分都用双引号括起来,而与数字用逗号隔开,如("Welcome",100)。
DimMyString,MyNumber
Open"Testnew.txt"ForInputAs#1
DowhileNotEOF(1)
Input#1,MyString,MyNumber'将数据读入到两个变量
PrintMyString,MyNumber
Loop其中,EOF()返回一个Boolean值,当Boolean值为True时,表明已经到达以Input模式打开的顺序文件的末尾。若未到达文件的末尾,则EOF()函数返回False。
(2) LineInput # 语句。功能:LineInput # 语句可以一次读取一行文本,并将它分配给字符串类型变量。语法格式:
LineInput#filenumber,varname其中,varname是用来存放读取内容的Variant或String变量名。用LineInput#语句一次只能从文件中读取一行字符,直到遇到回车符或回车换行符时为止。逗号不是该语句的分隔符。回车换行符将被跳过,而不会被附加到字符串上,因此,如果要保留该回车换行符,则必须用代码添上。例如:用LineInput#语句从顺序文件Testnew.txt中读入一行数据,并将该行数据赋予一个变量。假设顺序文件Testnew.txt内含数行文本数据。
DimTextLineAsString
Open“Testnew.txt”ForInputAs#1
'打开文件
DoWhileNotEOF(1)
'循环至文件尾
LineInput#1,TextLine
'读入一行数据并将其赋予某变量
PrintTextLine
'窗口中显示数据
Loop
(3) Input()函数。功能:该函数返回String,它包含以Input模式打开的文件中的字符。语法格式:
Input(number,[#]filenumber)其中,number参数是任何有效的数值表达式,指定要返回的字符个数;filenumber是任何有效的文件号。与Input # 语句不同,Input()函数返回它所读出的所有字符,包括逗号、回车符、空白列、换行符、引号和前导空格等。例如:用Input()函数一次读取顺序文件Testnew.txt中的一个字符,并将它显示出来。假设Testnew.txt文件内含数行文本数据。
DimMyChar
Open"Testnew.txt"ForInputAs#1
DoWhileNotEOF(1)
MyChar=Input(1,#1)'一次读入一个字符
PrintMyChar
Loop
4)顺序文件的关闭对文件进行读写操作之后,必须将文件关闭,否则会造成文件中数据的丢失。这是因为,将数据写入文件实际上是将数据写入缓冲区,关闭文件才能将缓冲区中剩余数据全部写入文件内。关闭文件可采用Close语句。
Close语句的语法格式:
Close[filenumberlist]其中,参数filenumberlist代表一个或多个文件号,若省略filenumberlist,则将关闭用Open语句打开的所有活动文件。注意:在执行Close语句时,文件与其文件号之间的关联将终结。例如:用Close语句关闭所有为Output而打开的文件(3个)。
DimiAsInteger,FileNameAsString
Fori=1To3 '循环3次
FileName="TEST"&i '创建文件名
OpenFileNameForOutputAs#1 '打开文件
Print#i,"Thisisatest."'将字符串写入文件
Nexti
Close '将3个已打开的文件全部关闭
3.程序实现
1)界面设计与属性设置具体操作步骤如下:
(1)新建工程,添加一个窗体。
(2)在窗体中添加控件,包括一个文本框和3个命令按钮。
(3)按表10.4所示设置窗体及控件属性。设计好的程序界面如图10.1所示。表10.4窗体及控件属性
2)编写代码其代码编写如下:
PrivateSubCommand1_Click()'读取文件
DimFile1AsString,nextlineAsString
File1="D:\text.txt"
Text1.Text=""
OpenFile1ForInputAs#1'按读方式打开
DoUntilEOF(1)
'将打开文本文件的内容赋予文本框
LineInput#1,nextline
Text1.Text=Text1.Text+nextline+Chr(13)+Chr(10)
Loop
Close#1
'关闭打开的文件
EndSub
PrivateSubCommand2_Click()
'将文本框的内容写入文件
DimcontentsAsString
Open"D:\text.txt"ForOutputAs#1'以写方式打开文件
contents=Text1.Text
Text1.Text=“”
'清除文本框中的内容
Print#1,contents'往文件中写入内容
Close#1
EndSub
PrivateSubCommand3_Click()
UnloadMe '退出程序
EndSub
3)运行程序单击“读出”命令按钮,程序打开顺序文件“D:\text.txt”,并将内容赋予文本框。在文本框中对文件进行编辑修改,将“如果要编辑一个文件”改为“如果要编辑一个顺序文件”,然后单击“写入”命令按钮,将修改的内容保存回该文件,文本框中清空。再次打开顺序文件“D:\text.txt”,显示修改成功,如图10.2所示。图10.2顺序文件使用示例10.2随机文件在文件操作中以顺序文件方式存取数据十分方便,也很常用,但是当需要大量查找或修改文件中的数据时会很困难,而这时采用随机文件方式存取数据就显得比较方便。随机文件的每一个数据项都有相同的长度,它的数据项通常称作记录。随机文件是以记录为单位的,每条记录都被赋予了记录号以便查找。应用程序可以根据记录号直接读取随机文件中的任意记录,而无须由前至后逐个读取。案例2随机文件的使用
1.学习目标设计一个演示随机文件读写操作的程序,程序运行界面如图10.3所示,要求该程序可以打开一个随机文件“D:\text.txt”,并可以从随机文件中读出记录,也可以往随机文件中添加记录。图10.3随机文件程序设计界面
2.相关知识
1)声明记录类型变量对随机文件的存取是以记录为单位进行的。记录是存储一组相互联系数据的一种数据结构,记录中的成分称作分量。每个记录包括一个或多个分量。具有一个分量的记录对应于任一标准类型,比如整数或定长字符串。具有多个分量的记录对应于用户自定义类型。例如,当我们要登记学生信息时需要登记学生的姓名、年龄、性别等,此时以记录方式保存学生信息既简洁又直观。在打开一个文件进行随机访问之前,应定义一个类型,该类型对应于该文件包含或将包含的记录。使用VisualBasic提供的自定义类型可以定义记录,其语法格式为:
[Private | Public]Type自定义类型名分量名Astype
[分量名Astype]
…
EndType例如:声明一个学生自定义类型。
TypeStudent
NameAsString
8 '姓名
AgeAs Integer'年龄
SexAsString
2 '性别
EndType由于随机文件中的所有记录都必须有相同的长度,因此在上面的用户自定义类型中,字符串类型的字段要使用固定的长度。若类型中的元素有数组类型,也必须将它定义为定长数组。如果实际字符串包含的字符数比类型定义中的字符少,则自动用空白字符来填充记录中后面的空间;如果字符串的长度超过定义的长度,则将截去多余字符。如要编辑随机访问的文件,需要先打开该文件,再把记录从文件读到程序变量,然后改变各变量的值,最后把变量写回文件。
2)打开随机文件在使用随机文件之前,应先用Open语句打开它。Open语句的语法格式为:
OpenpathnameForRandomAsfilenumberLen=reclength其中各参数的含义如下:● ForRandom:可选项。如果未指定打开文件的方式,则以Random访问方式打开文件。对随机文件进行打开操作时,读或写模式都相同,无须指明输入、输出或追加模式。因为随机文件按记录操作,无论读或写都不影响文件中其他内容,只要打开一次随机文件就可同时进行读或写操作。● Len=reclength:该表达式指定了每条记录的大小。如果reclength设置的值比写入文件中的记录的实际长度短,则会产生一个错误;如果reclength设置的值比记录的实际长度长,则记录可以写入,但是会浪费一些磁盘空间。例如:
DimLastrecordAsLong'存放最后一条记录的编号
Dimstudent1Asstudent
DimRecLengthasLong
RecLength=Len(student1)'计算每条记录的长度
FileNum=FreeFile()
'取出下一个可用文件编号
Open“School.dat”ForRandomAsFileNum
Len=
RecLength'用Open语句打开新文件
LastRecord=LOF(FileNum)/RecLength'存放文件中记录的个数
3)随机文件的读操作使用Get语句可以从随机文件中读出指定的记录,其语法格式为:
Get[#]filenumber,[recnumber],varname其中,可选参数recnumber在随机文件中表示记录号,以表示从此处开始读出数据。随机文件中第一条记录的记录号为1,第二条记录为2,依此类推。若省略recnumber,则会读出紧随上一个Get或Put语句之后的下一条记录(或读出最后一条Seek函数指出的记录)。例如:用Get语句将数据从随机文件读到变量中。
DimStudent1AsStudent,PositionAsLong '声明变量
Open"School.dat"ForRandomAs#1Len=Len(Student1)'为随机访问打开样本文件
Position=4
'定义记录号
Get#1,Position,Student1'读样本文件第4条记录到变量Student1中
Close#1
'关闭文件把记录读取到变量后,就可以对记录进行处理。例如:用下面的语句将记录的各个字段分别送到文本框中,以便用户进行编辑。
text1.text=Student1.Number
text2.text=Student1.Name
text3.text=Student1.Score
4)随机文件的写操作使用Put语句可以把数据重新写入磁盘文件中,也可以往随机文件中添加新的记录。Put语句的语法格式为:
Put[#]filenumber,[recnumber],varname其中各参数的含义与Get语句的相同。使用Put语句可以完成以下操作:
(1)替换记录。用Put语句替换记录,只需指明要被替换记录的位置即可。例如,要将上面编辑后的结果写入文件,以替换原来的记录内容,可用如下语句:
Student1.Number=text1.text
Student1.Name=text2.text
Student1.Score=text3.text
Put#1,Position,Student1'Position指明被替换记录的位置
(2)添加记录。使用Put语句可以向打开的随机文件的末端添加记录,只需把命令参数recnumber变量的值设置为比文件中的记录数多1即可。
(3)删除记录。通过清除记录分量可以删除一条记录,但是该记录仍在文件中存在。通常文件中不能有空记录,因为它们会浪费空间且会干扰顺序操作。最好把余下的记录拷贝到一个新文件中,然后删除原文件。清除随机访问文件中要删除的记录的操作步骤如下:①创建一个新文件;②把有用的所有记录从原文件复制到新文件;③关闭原文件并用Kill语句删除它;④使用Name语句把新文件以原文件的名字重新命名。
3.程序实现
1)界面设计与属性设置具体操作步骤如下:
(1)新建工程,添加一个窗体。
(2)在窗体中添加控件,包括3个文本框、3个命令按钮和3个标签。
(3)按表10.5所示设置窗体及控件属性。设计好的程序界面如图10.3所示。表10.5窗体及控件属性
2)编写代码其代码编写如下:
PrivateTypeStudent
NameAsString*8
AgeAsInteger
SexAsString*2
EndType
PrivateSubCommand1_Click() '读取随机文件
DimstdAsStudent
DimRecordeLenAsInteger,recordeNumAsInteger
Text1.Text=""
Text2.Text=""
Text3.Text=""
RecordeLen=Len(std)
recordeNum=3
Open"D:\text.dat"ForRandomAs#1Len=RecordeLen
Get#1,recordeNum,std
Text1.Text=std.Name
Text2.Text=Str(std.Age)
Text3.Text=std.Sex
recordeNum=recordeNum-1
Get#1,recordeNum,std
Text1.Text=Text1.Text+Chr(13)+Chr(10)+std.Name
Text2.Text=Text2.Text+Chr(13)+Chr(10)+Str(std.Age)
Text3.Text=Text3.Text+Chr(13)+Chr(10)+std.Sex
recordeNum=recordeNum-1
Get#1,recordeNum,std
Text1.Text=Text1.Text+Chr(13)+Chr(10)+std.Name
Text2.Text=Text2.Text+Chr(13)+Chr(10)+Str(std.Age)
Text3.Text=Text3.Text+Chr(13)+Chr(10)+std.Sex
Close#1
EndSub
PrivateSubCommand2_Click()'将记录写入随机文件
DimRecordeLenAsInteger,recordeNumAsInteger
DimZhangSanAsStudent
DimLiSiAsStudent
DimWangWuAsStudent
ZhangSan.Name="张三"
ZhangSan.Age=19
ZhangSan.Sex="男"
LiSi.Name="李四"
LiSi.Age=20
LiSi.Sex="男"
WangWu.Name="王五"
WangWu.Age=18
WangWu.Sex="女"
RecordeLen=Len(ZhangSan)
recordeNum=1
Open"D:\text.dat"ForRandomAs#1Len=RecordeLen
Put#1,recordeNum,ZhangSan
recordeNum=recordeNum+1
Put#1,recordeNum,LiSi
Put#1,,WangWu
Close#1
EndSub
PrivateSubCommand3_Click()'退出程序
UnloadMe
EndSub
3)运行程序单击“写入”命令按钮,程序在D:\text.dat文件中写入三条记录。单击“读出”命令按钮,刚刚写入文件的学生记录被读出,显示在三个文本框的第一行上,然后读取第二条记录,将学生数据显示在三个文本框的第二行上,最后读取第一条记录,将学生数据显示在三个文本框的第三行上,如图10.4所示。图10.4随机文件使用示例10.3二 进 制 文 件二进制文件是一个字节流,文件系统并不解释各字节的意义,解释工作由具体的应用程序完成。二进制文件每一次读写是以字节为单位对数据进行访问操作的,它允许用户读写或修改文件中的任何字节信息。当要保持文件的尺寸尽量小时,应使用二进制文件。以二进制方式访问文件有下述特点:●可以直接访问文件中的所有数据;●由应用程序根据需要解释数据的意义;●访问文件的语句不更改原始数据的所有内容。当把二进制数据写入文件中时,应使用Byte数据类型的数组,而不能用String变量,因为String变量被认为包含的是字符,而二进制型数据可能无法正确地存储在String变量中。访问二进制文件时,首先要打开文件,然后读取数据,最后关闭打开的文件。
1.二进制文件的打开在VB中,使用Open语句打开二进制文件。其语法格式为:
OpenpathnameforBinaryAsfilenumber例如:打开二进制文件D:\text.dat。
Open"D:\text.dat"ForBinaryAs1二进制文件在打开时不需指明读写方式,只要打开一次便可用读写语句进行任意读写操作。
2.二进制文件的读写二进制文件的读写与随机文件的类似,都可用Get和Put语句。其语法格式为:
Get[#]filenumber,[recnumber],varname
Put[#]filenumber,[recnumber],varname其中各参数的含义如下:● recnumber:表示开始读取数据字节的位置,文件中第一个字节位置为1,第二个字节位置为2,依此类推。如果省略此参数,则表示从当前位置的下一个字节开始读数据。当省略该参数时,参数前后的逗号不能省略。● varname:varname的类型决定从文件中读取多少个字节的数据,即变量在程序中进行声明时为其分配了内存空间,一次读取数据的字节数与变量在内存中所占字节数相同。所以,程序中定义变量的长度可决定每次从文件读取数据的字节数。例如:从二进制文件D:\text.dat中读取两个字节的数据信息。
DimdataAsInteger
Get#1,data二进制文件可以使用可变长字段,所以不能随机地访问记录,而必须顺序地访问记录以了解每一条记录的长度,这是进行二进制读写操作的主要缺点。但是在这种文件模式下,可以直接查看文件中指定的字节,所以,二进制模式也是唯一支持用户到文件任何位置读写任意长度数据的方法。
3.设置数据指针位置在随机文件和二进制文件中,除了可通过记录号和字节位置来确定需要访问的数据外,还可以通过Seek语句设置在打开文件中下一次进行读或写操作的位置。Seek语句的语法格式为:
Seek[#]filenumber,position其中,参数position为必选项,是介于1~2147483647之间的数字,指出下一个读写操作将要发生的位置。可用该语句设定好数据指针位置,然后再对文件进行读写操作。为了同时利用随机文件和二进制文件的优点,一般采用下述方法:当字段长度固定或变化不大时,使用随机文件模式;对于长度变化很大的字段,使用二进制文件模式。在Binary、Input和Random方式下,可以用不同的文件号打开同一文件,而不必先将该文件关闭。在Append和Output方式下,如果要用不同的文件号打开同一文件,则必须在打开文件之前先关闭该文件。10.4与文件系统相关的控件在设计应用程序时,常常需要用户选择驱动器、目录、文件,VisualBasic为用户查找文件提供了两种途径:一种是利用通用对话框(CommonDialog)控件提供的标准对话框,该对话框中列出了驱动器、目录和文件;另一种是利用文件系统控件组合创建自己的对话框。VisualBasic提供三种文件系统控件:驱动器列表框(DriveListBox)、目录列表框(DirListBox)和文件列表框(FileListBox)。这三种控件一般同时出现在一个界面上,用于和用户交互管理文件系统,但三者在界面设计阶段仅显示当前驱动器下的目录结构及当前目录下的文件结构,且三者之间无任何联系,所以在程序设计时必须通过代码将三者有机地联系起来。驱动器列表框、目录列表框和文件列表框三种控件能够自动地从操作系统中获取一切信息,且操作比CommonDialog控件更灵活、功能更强大。但如果只需要标准的“打开文件”或“保存”文件对话框,则使用CommonDialog控件就可以满足要求。案例3驱动器列表框、目录列表框、文件列表框控件的应用
1.学习目标设计一个文件系统控件的演示程序,要求运行该程序时,在文本框中输入某种类型的文件(如
.exe),则在文件列表框中显示出同一类型的文件。若改变驱动器列表框或目录列表框的信息,则文件列表框中显示的文件也要发生变化,但显示文件的类型不发生变化,程序运行界面如图10.5所示。图10.5驱动器列表框、目录列表框、文件列表框的使用示例
2.相关知识
1)驱动器列表框驱动器列表框(DriveListBox)控件是下拉式列表框,用来显示用户系统中所有有效磁盘驱动器的列表。在设计时驱动器列表框控件已将计算机内所有有效驱动器名全部列入下拉列表框中,运行程序时,用户可以直接输入有效的驱动器标识符,或者单击列表框的下拉箭头,从列举出的驱动器名称中进行选择。默认情况下,它显示用户系统的当前驱动器,如图10.6所示。图10.6驱动器列表框驱动器列表框的Drive属性主要用于在运行时返回或设置所选定的驱动器。Drive属性不能在设计状态时设置,只能在程序中被引用或设置,其形式如下:
[对象.]Drive[=drive]其中,对象为驱动器列表框名称;Drive为驱动器名称。每次重新设置Drive属性都会引发该控件的Change事件。例如:语句Drive1.Drive="d:\" 可将列表框顶端的驱动器更改为“d:\”。
2)目录列表框目录列表框(DirListBox)控件显示当前驱动器的目录结构及当前目录下的所有子目录,供用户选择其中的某个目录作为当前目录。在目录列表框中,如果双击某个目录,就会显示出该目录下的所有子目录。例如,在执行时双击C: 根目录就会显示出C: 根目录下的所有子目录,若要查看WINNT子目录结构,只需双击WINNT子目录即可,结果如图10.7所示。图10.7目录列表框目录列表框只能显示出当前驱动器下的子目录。如果要显示其他驱动器下的目录结构,则必须重新设置目录列表框上的Path属性。目录列表框的Path属性用来返回或设置当前路径,它适用于目录列表框和文件列表框,不能在设计状态下设置。其形式如下:
[对象.]Path[=pathname]其中,对象指目录列表框或文件列表框;pathname是一个路径名字符串。每次重新设置Path属性都会引发目录列表框控件的Change事件。如果窗体上同时建立了驱动器列表框和目录列表框,则在drvDrive_Change事件过程中加入语句drvDirectory.Path
=drvDrive.Drive就可以产生同步效果,即在驱动器列表框中改变驱动器的内容,则目录列表框中的内容立即同步改变。因为,当在驱动器列表框drvDrive中改变了驱动器时,drvDrive.Drive属性改变了,触发了drvDrive_Change事件,执行drvDirectory.Path=drvDrive.Drive语句,改变drvDirectory.Path属性就意味着目录列表框drvDirectory的内容改变了,从而立即显示刚刚被选定的驱动器的目录结构。
3)文件列表框文件列表框(FileListBox)控件是用来显示当前驱动器中当前目录下的文件目录清单的一种列表框。文件列表框也有Path属性,表示列表框中显示的文件所在的路径。每次重新设置文件列表框的Path属性都会引发PathChange事件。文件列表框的Pattern属性用于返回或设置文件列表框所显示的文件类型。该属性值为具有通配符的文件名字符串,缺省值为“
.
”,表示可显示所有文件。此属性既可以在设计时设置,也可以在程序中改变。其形式如下:
[对象.]Pattern[=value]其中,对象指文件列表框名称;value是一个文件名字符串。每次重新设置Pattern属性都会引发该控件的PatternChange事件。例如:如果执行了语句
filFile.Pattern="
.exe"则filFile文件列表框中只显示 .exe文件,如图10.8所示。图10.8文件列表框
3.程序实现
1)界面设计与属性设置具体操作步骤如下:
(1)新建工程,添加一个窗体。
(2)在窗体中添加控件,包括4个标签、1个文本框、2个命令按钮,驱动器列表框、目录列表框和文件列表框各1个。
(3)按表10.6所示设置窗体及控件属性。设计好的程序界面如图10.5所示。表10.6窗体及控件属性
2)编写代码编写事件代码如下:
PrivateSubCommand1_Click()
File1.FileName=Text1.Text
EndSub
PrivateSubCommand2_Click()
UnloadMe
EndSub
PrivateSubDrive1_Change()'使目录列表框中的路径与驱动器列表同步变化
Dir1.Path=Drive1.Drive
MsgBox"选中的驱动器是"+Drive1.Drive
EndSub
PrivateSubDir1_Change()
File1.Path=Dir1.Path '设置文件列表框路径
MsgBox"选中的文件夹是"+Dir1.Path
EndSub
PrivateSubFile1_Click()
MsgBox"选中的文件是"+File1.FileName
EndSub
PrivateSubFile1_PatternChange()
Text1.Text=File1.Pattern'将文件类型设置为新模式
EndSub
3)运行程序运行程序,在文本框中输入“
.exe”,则执行结果如图10.5所示。案例4通用对话框控件的应用
1.学习目标设计一个通用对话框操作的演示程序,要求将“打开”、“打印”、“另存为”三个通用对话框调入窗体,设置三个命令按钮用于调用三种对话框,其窗体布局如图10.9所示。运行程序后,能正确调用三个通用对话框。图10.9通用对话框操作示例
2.相关知识通用对话框(CommonDialog)控件常用于提供要读的文件名或要写的文件名。通用对话框共有六种,即Open(打开)、SaveAs(保存文件)、Print(打印)、Color(颜色)、Font(字体)、Help(帮助)。通过设置通用对话框控件的属性和使用它的不同方法,可以打开文件、保存文件以及显示“颜色”对话框、“字体”对话框和“打印”对话框。
1)创建通用对话框控件通用对话框(CommonDialog)控件是一个ActiveX控件,使用前,应该先将它们添加到工具箱中。具体方法如下:
(1)选择“工程”菜单项中的“部件”选项,或在工具箱中单击鼠标右键,在弹出的快捷菜单中选择“部件”选项,调出“部件”对话框,如图10.10所示。
(2)在“控件”选项卡中列出了可以添加的ActiveX控件,选择所需的“Microsoft
CommonDialogControl6.0”列表项,单击该控件名称左边的复选框。
(3)单击“确定”命令按钮,关闭“部件”对话框,被选中的通用对话框控件被添加到当前工程的工具箱中,图标为,缺省名为CommonDialogX(X为1,2,…)。图10.10“部件”对话框
2)通用对话框控件的属性在调用通用对话框的方法之前,应该根据需要设置该控件的属性。与其他控件相似,设置通用对话框属性的方法也有两种,一种是在属性窗口中设置,另一种是使用代码设置。在属性窗口中设置通用对话框属性的方法如下:
(1)右击窗体上的通用对话框控件,再单击弹出菜单中的“属性”菜单项,系统显示如图10.11所示的“属性页”对话框。图10.11“属性页”对话框
(2)当需要使用“打开”对话框或“另存为”对话框时,在“打开/另存为”选项卡中设置通用对话框的属性。下面简单介绍一下常用的“打开/另存为”选项卡中常用选项的意义,其他选项卡选项的意义可参考VB6.0的MSDN帮助。●对话框标题:对应于通用对话框的DialogTitle属性,指定“打开”对话框或“另存为”对话框的标题。缺省时,这两个对话框的标题分别为“打开”和“另存为”。●文件名称:对应于通用对话框的FileName属性,指定通用对话框中缺省选中的文件的名称,同时也指明了通用对话框缺省显示的驱动器和目录名。不指定该选项时,“打开”对话框或“另存为”对话框自动显示当前驱动器上当前目录下的文件。●初始化路径:对应于通用对话框的InitDir属性,指定“打开”或“另存为”对话框的初始目录。如果此属性没有指定,则通用对话框使用当前目录。●过滤器:对应于通用对话框的Filter属性,指定对话框中都显示哪些文件。例如,选择过滤器为*.txt时,对话框中显示所有的文本文件。过滤器的格式为:
description1|filter1|description2|filter2…其中,description1、description2是过滤器的文本描述;filter1、filter2是过滤器的定义。●标志:对应于通用对话框的Flags属性,指定“打开”或“另存为”对话框的形式以及文件选择方式(单项选择还是多项选择)。
3)通用对话框控件的方法通用对话框有如下6个常用的方法:
(1) ShowOpen方法:用于调用“打开”对话框;
(2) ShowSave方法:用于调用“另存为”对话框;
(3) ShowPrinter方法:用于调用“打印”对话框;
(4) ShowColor方法:用于调用“颜色”对话框;
(5) ShowFont方法:用于调用“字体”对话框;
(6) ShowHelp方法:用于调用“帮助”对话框。
3.程序实现
1)界面设计与属性设置具体操作步骤如下:
(1)新建工程,添加一个窗体。
(2)在窗体中添加控件,包括3个通用对话框和3个命令按钮。
(3)设置通用对话框控件的属性。在第1个通用对话框控件中,将“打开/另存为”选项卡中的对话框标题指定为“打开”,过滤器的格式设置为“所有文件(*.*) | *.* | 文本
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届江西科技学院附属中学中考二模生物试题含解析
- 2025届黑龙江省双鸭山市集贤县重点达标名校中考冲刺卷生物试题含解析
- 城中村改造风险分析与防控措施
- 河北省邯郸市大名县2025届中考生物模拟试题含解析
- 服务协议书范本
- 2025届山西省太原市小店区志达中学中考生物全真模拟试题含解析
- 空调安装承包合同
- 郊区临时场地租赁协议
- 夫妻离婚协议标准范本
- 智能机器人技术推广应用协议
- 2025年度高端商务车辆聘用司机劳动合同模板(专业版)4篇
- 2025年福建福州市仓山区国有投资发展集团有限公司招聘笔试参考题库附带答案详解
- 2025年人教版新教材数学一年级下册教学计划(含进度表)
- GB/T 45107-2024表土剥离及其再利用技术要求
- 2025长江航道工程局招聘101人历年高频重点提升(共500题)附带答案详解
- 2025年黑龙江哈尔滨市面向社会招聘社区工作者1598人历年高频重点提升(共500题)附带答案详解
- 2025年国新国际投资有限公司招聘笔试参考题库含答案解析
- 2025年八省联考四川高考生物试卷真题答案详解(精校打印)
- 执行总经理岗位职责
- NS3000计算机监控系统使用手册
- 《妊娠期恶心呕吐及妊娠剧吐管理指南(2024年)》解读
评论
0/150
提交评论