VB电子教材07.docx
《VB电子教材07.docx》由会员分享,可在线阅读,更多相关《VB电子教材07.docx(44页珍藏版)》请在冰豆网上搜索。
VB电子教材07
第7章文件
通过前几章的学习,使我们了解,利用VB可以编写一些用于科学计算、图形处理等方面的程序。
不仅如此,VB还广泛地应用于编制如人事、财务、生产、教学等各方面的管理程序,在这类应用中,通常需要处理大量不同类型的数据信息,而这些数据信息常常需要独立存储在某种介质上(如磁盘等),以便需要时通过程序来加工处理,这种独立存储的数据集合就称为文件。
因此,掌握文件的概念及其使用方法是VB程序设计的重要内容之一。
7.1与文件操作有关的控件
在Windows应用程序中打开文件或保存文件时,通常需要打开一个对话框,用于选择文件所在的驱动器(盘)、文件夹(目录)、文件名。
在VB中,使用盘驱动器列表框(DriveListBox)、目录路径列表框(DirListBox)以及文件列表框(FileListBox)这3种控件的组合,可以创建类似Windows资源管理器的文件操作对话框,用于选择文件。
7.1.1盘驱动器列表框控件
盘驱动器列表框控件用于显示驱动器列表,工具箱中该控件图标为。
该控件缺省的名称为:
Drive1、Drive2、……
盘驱动器列表框控件常用属性
⑴Drive属性(字符串类型)
用来设置当前驱动器或返回所选择的驱动器名。
Drive属性只能在程序运行时赋值,而不能通过属性窗口设置。
为驱动器列表框的Drive属性赋值的语句格式为:
<盘驱动器列表框名>.Drive[=驱动器名]
格式中的“驱动器名”为指定的驱动器,也就是说使该驱动器成为当前驱动器;如果省略,则不改变当前驱动器。
如果所指定的驱动器在系统中不存在,则产生错误。
程序运行时若选择驱动器,则Drive属性值改写为所选择的驱动器名。
如运行时单击驱动器列表框控件drive1中D:
盘图标,则drive1.drive的值为"d:
"。
值得注意的是:
盘驱动器列表框中显示的驱动器名都是由系统自动生成的,用户只能通过列表框选择使用,不可以对Drive控件使用AddItem、RemoveItem等方法添加或删除列表项。
⑵List属性(字符串数组)
List数组的每一个元素中的字符串,为1个驱动器名,数组下标从0开始。
⑶ListCount属性(正整数)
ListCount属性值表示系统中盘驱动器的个数。
若系统有驱动器a:
、c:
、d:
、e:
、f:
(光驱),则驱动器列表框控件drive1的ListCount属性值为5,执行下列语句后在窗体上输出的结果为“a:
c:
d:
e:
f:
”。
Fori%=0ToDrive1.ListCount-1
PrintDrive1.List(i%);
Nexti%
盘驱动器列表框控件常用事件
运行时,当单击驱动器列表框中某一驱动器图标时,该驱动器的名就赋值给控件的Drive属性,同时引发Change事件。
例7-1在窗体上设计一个盘驱动器列表框Drive1、一个标签Label1。
当程序启动时,设置当前驱动器为C盘;选择盘驱动器列表框中的盘符,在标签上显示相应的当前驱动器信息。
在窗体的Load事件中设置Drive属性的初值、编制事件过程Drive1_Change如下:
PrivateSubForm_Load()
Drive1.Drive="c:
"
Label1.Caption="当前驱动器为:
"+Drive1.Drive
EndSub
PrivateSubDrive1_Change()
Label1.Caption="当前驱动器为:
"+Drive1.Drive
EndSub
界面设计和程序运行的情况分别如图7-1a和图7-1b所示。
图7-1a例7-1之界面设计图7-1b例7-1之运行情况
7.1.2目录路径列表框控件
目录路径列表框控件在工具箱中的图标为。
目录路径列表框控件用于显示当前驱动器中文件夹(目录)列表。
如图7-2所示。
其中,突出显示的为当前目录。
目录路径列表框控件缺省的控件名称为:
Dir1、Dir2、……
目录路径列表框控件常用属性
⑴Path属性(字符串类型)
Path属性值为当前目录或所选择的目录名。
如果选中盘x的根目录,则Path属性为"x:
\";如果选中盘x的某一个子目录y(文件夹),则Path属性为"x:
\y"。
请注意,Path属性值的最后一个字符是否为"\",取决于是否选中根目录。
同Drive属性一样,Path属性只能用程序代码设置,而不能在设计时通过属性窗口设置。
为目录列表框的Path属性赋值的语句格式为:
<目录路径列表框名>.Path[=目录路径名]
图7-2文件夹(目录)列表
运行时单击目录列表框中某一文件夹(目录)图标时,该目录被突出显示,表示被选中。
选中目录则改变目录列表框的ListIndex属性,但是没有改变其Path属性,若要改变Path属性值为所选中的目录路径,应当执行语句:
<目录路径列表框名>.Path=<目录路径列表框名>.List(<目录路径列表框名>.ListIndex)
⑵List属性(字符串数组)
List(0)、List
(1)、...、List(ListCount-1)中的字符串为目录路径列表框中所选目录下所有的目录名,该数组由系统自动生成。
⑶ListCount属性(正整数)
ListCount属性值为List数组中的元素个数,即所选目录之下1级目录的数量。
如在图7-2中,若VB98目录下的子目录已全部显示,则Dir1.ListCount属性值为5。
若执行语句:
Fori%=0ToDir1.ListCount-1
PrintDir1.List(i%)
Nexti%
窗体上输出结果为:
c:
\ProgramFile\MicrosoftVisualStudio\VB98\Setup
c:
\ProgramFile\MicrosoftVisualStudio\VB98\Template
c:
\ProgramFile\MicrosoftVisualStudio\VB98\Tsql
c:
\ProgramFile\MicrosoftVisualStudio\VB98\Wizards
c:
\ProgramFile\MicrosoftVisualStudio\VB98\新文件夹
⑷ListIndex属性(整数)
该属性取值范围为-n~ListCount-1,当前目录所对应的ListIndex属性值为-1,当前目录的上1级目录所对应的ListIndex属性值为-2,其中的n反映了当前目录在目录层次中的深度。
Path属性值也可以通过在事件过程的程序代码中重新定义Dir控件的ListIndex属性来选择设置:
Dir1.ListIndex=2选当前目录下1级目录中的第3个目录为当前目录(文件夹)
Dir1.ListIndex=0选当前目录下1级目录中的第1个目录为当前目录。
Dir1.ListIndex=-2选当前目录上1级目录为当前目录。
Dir1.ListIndex=-3选当前目录上2级目录为当前目录。
若要改变的当前目录不存在,则显示出错信息。
如在图7-2中,假定当前所选文件夹是VB98:
执行语句“Dir1.ListIndex=2”后文件夹Tsql被突出显示;
执行语句“Dir1.ListIndex=0”后文件夹Setup被突出显示;
执行语句“Dir1.ListIndex=-3”后文件夹ProgramFiles被突出显示,等等。
目录路径列表框控件常用事件
⑴Change事件
每次重新设置或选择改变目录路径列表框的Path属性时,都将引发Change事件。
运行时双击目录路径列表框的列表选项,可改变Path属性值为当前目录名,并执行Change事件。
⑵Click事件
单击选中目录路径列表框控件Dir1的某个目录名,则选中该目录,但Dir1.Path属性没有改变,可以在事件过程Dir1_Click中写入语句“Dir1.Path=Dir1.List(Dir1.ListIndex)”,则可以在选择目录的同时改变Dir1.Path属性为所选目录的路径。
在窗体的Load事件中可以设置Path属性的初值。
例7-2目录路径列表框示例。
界面设计:
在窗体上建立目录路径列表框控件Dir1、三个标签控件(Label1、Label2、Label3)以及一个列表框控件List1。
程序启动时,设置初始当前目录为"C:
\WINDOWS";
程序运行后,通过鼠标双击Dir1中的列表选项,改变当前目录,同时在三个标签控件上分别显示当前目录、当前ListIndex和ListCount的值,在List1中显示当前目录的所有下一级目录的目录路径信息。
程序的运行情况如图7-3所示。
图7-3双击“MyDocuments”文件夹后的显示
过程设计
编写Form_Load和Dir1_Change事件过程如下:
PrivateSubForm_Load()
'设置Dir1控件的初始路径
Dir1.Path="C:
\WINDOWS"
EndSub
'双击控件Dir1时执行下列事件过程Dir1_Change
PrivateSubDir1_Change()
Label1.Caption="当前目录:
"+Dir1.Path
Label2.Caption="ListIndex="+Str(Dir1.ListIndex)
Label3.Caption="ListCount="+Str(Dir1.ListCount)
List1.Clear
Fori%=0ToDir1.ListCount-1
List1.AddItemDir1.List(i%)
Nexti%
EndSub
在双击Dir1前,目录列表框中突出显示的是C:
\WINDOWS目录;
双击“MyDocuments”文件夹后,所选目录和Dir1.Path均改变为“c:
\MyDocuments”。
将下列Click事件过程与上述过程Dir1_Change相比较,可知要实现同样的功能,其中的语句“Dir1.Path=Dir1.List(Dir1.ListIndex)”是必不可少的。
'单击控件Dir1时执行该事件过程
PrivateSubDir1_Click()
Dir1.Path=Dir1.List(Dir1.ListIndex)
Label1.Caption="当前目录:
"+Dir1.Path
Label2.Caption="ListIndex="+Str(Dir1.ListIndex)
Label3.Caption="ListCount="+Str(Dir1.ListCount)
List1.Clear
Fori%=0ToDir1.ListCount-1
List1.AddItemDir1.List(I%)
Nexti%
EndSub
在实际应用中,目录路径列表框Dir1与盘驱动器列表框Drive1有着紧密的关系。
一般情况下,改变盘驱动器列表框中的驱动器名后,目录路径列表框中的目录也要随之改变为该驱动器上的目录。
要实现这样的同步变化,可以在盘驱动器列表框的Change事件中设置如下命令:
Dir1.Path=Drive1.Drive
将用户在盘驱动器列表框中选择的Drive属性,改写目录列表框中的Path属性,使目录列表框中显示所选驱动器下的目录。
7.1.3文件列表框控件
文件列表框控件用于显示当前目录中的文件列表,该控件图标为。
文件列表框控件缺省的控件名称为:
File1、File2、……
文件列表框控件常用属性
⑴Path属性(字符串类型)
同目录路径列表框的Path属性一样,用以设置当前文件列表框内所显示文件的存储路径。
仅在运行时读写,不能在属性窗口中设置。
文件列表框总是显示Path所指示的文件夹中的文件。
若在Form_Load事件中写入语句“File1.Path="C:
\Windows"”,则窗体装入后File1显示文件夹C:
\Windows中的文件列表。
⑵Filename属性(字符串类型)
用以设置或返回所选文件的文件名,不能在属性窗口中设置,运行时若在文件列表框中选择文件将改写Filename属性值。
所选文件的全名f$为:
IfRight(File1.Path,1)="\"Then
f$=Form1.File1.Path+Form1.File1.FileName
Else
f$=Form1.File1.Path+"\"+Form1.File1.FileName
EndIf
在第6章中介绍的通用对话框控件也有同名的FileName属性,请读者注意两者的区别。
同样,在实际应用中,文件列表框也要随着目录路径列表框的改变而变化。
在程序中创建三个控件Drive1、Dir1、File1,并编制下列事件过程,则程序运行时对这些列表框所作选择可以起到调用通用(文件)对话框的作用。
PrivateSubDrive1_Change()
Dir1.Path=Drive1.Drive
EndSub
PrivateSubDir1_Change()
File1.Path=Dir1.Path
EndSub
⑶Pattern属性(字符串类型)
用以设置文件列表框中文件的显示模式,缺省值为“*.*”。
此属性可以在属性窗口中设置,也可以在程序中通过赋值设置。
字符串中为若干个用分号间隔的文件名,在文件名中可以含有通配符。
例如:
在Form_load事件中写入语句File1.Pattern="*.exe",使File1列表框中只显示所有扩展名为EXE的文件;
写入语句File1.Pattern="*.dat;a*.*",使File1列表框中只显示所有扩展名为DAT以及文件名首字符为a的文件,等等。
文件列表框控件常用事件
与盘驱动器列表框和目录路径列表框不同的是:
文件列表框能支持PathChange和PatternChange事件,但不能响应Change事件。
PathChange事件
当改变了文件列表框的文件显示路径时,引发PathChange事件。
PatternChange事件
当改变了文件列表框的文件显示模式,即Pattern属性值的改变将引发PatternChange事件。
例7-3在窗体上建立一个盘驱动器列表框Drive1、目录路径列表框Dir1、文件列表框File1、影像框Image1,运行时选择File1中所列的图片文件,则相应图片显示在影像框Image1中。
界面设计,如图7-4所示。
图7-4例7-3之界面设计
过程设计
PrivateSubForm_Load()
Drive1.Drive="c:
\"'设置Drive1的初始盘符
File1.Pattern="*.bmp;*.pif"'设置File1的文件显示模式
EndSub
PrivateSubDrive1_Change()
Dir1.Path=Drive1.Drive'使Dir1与Drive1同步改变
EndSub
PrivateSubDir1_Change()
File1.Path=Dir1.Path'File1与Dir1同步改变
EndSub
PrivateSubFile1_Click()'单击文件列表选项,加载图片
IfRight(File1.Path,1)="\"Then
f$=Form1.File1.Path+Form1.File1.FileName
Else
f$=Form1.File1.Path+"\"+Form1.File1.FileName
EndIf
Image1.Picture=LoadPicture(f$)
EndSub
程序运行的情况如图7-5所示。
图7-5例7-3之运行情况
7.2与文件操作有关的语句
7.2.1直接调用外部可执行文件的Shell方法
调用Shell函数可以执行外部的可执行文件,其扩展名如.exe、.com、.bat或.pif,缺省扩展名为.exe。
不能执行操作系统的内部命令及所有非执行文件(如文档),否则将显示出错信息。
调用shell函数的格式:
CallShell([,Windows_style])
或<变量名>=Shell(Filename,Windows_style)
其中:
Filename为字符串,是所调用可执行文件的全名。
Windows_style参数用于规定当前窗口与被调用文件窗口的不同状态。
其值为0、1、2、3、4、6的表达式。
函数返回值在Windows9x中无意义,但必须书写,因此格式中的“变量名”是无用但又是必须的。
例7-4将例7-3工程生成为exe文件,保存在D:
盘根目录下,并取名为Tupian,则可用以下方式调用该工程。
PrivateSubCommand1_Click()
x=Shell("d:
\tupian.exe",0)
EndSub
例7-5在窗体上添加通用对话框控件Commondialog1、单击命令按钮Command1,打开文件对话框选择扩展名为EXE的文件执行。
界面设计,如图7-6a所示:
图7-6a例7-5之界面设计图7-6b例7-5之运行情况
过程设计
PrivateSubCommand1_Click()
CommonDialog1.Action=1
x=Shell(CommonDialog1.Filename,0)
EndSub
若运行时在文件对话框中选择windows中“计算器”文件“calc.exe”,则该程序被调用,如图7-6b所示,关闭计算器窗口后,控制返回到VB应用程序界面。
7.2.2目录和文件操作语句
改变当前盘
格式:
ChDrive<盘符>
其中:
<盘符>为字符串,即驱动器名。
例7-6确认calc.exe的准确位置如“c:
\windows\calc.exe”(可以通过运行“开始”菜单的“查找”选项确认),下列过程打开该文件。
PrivateSubCommand1_Click()
ChDrive"c:
"'改变c:
盘为当前盘
y=Shell("\windows\calc.exe",0)'省略盘符,指当前盘
EndSub
创建文件夹
格式:
MKDir<文件夹名>
例7-7(先建立1个目录路径列表框以便观察)执行下列事件过程。
PrivateSubcommand1_click()
MKdir"c:
\aaa"'建立文件夹c:
\aaa
MkDir"c:
\aaa\bbb"'建立文件夹c:
\aaa\bbb
EndSub
如果要创建的文件夹已经存在、或所指出的路径是错误的,则执行该过程将产生错误信息。
如上面的两条命令如交换次序,则出现错误,因为在建立文件夹bbb时,所指出的路径c:
\aaa还不存在。
删除文件夹
格式:
RMDir<文件夹名>
例7-8(在运行例7-7程序的基础上)执行下列事件过程。
PrivateSubCommand1_Click()
RMdir"c:
\aaa\bbb"'删除文件夹c:
\aaa\bbb
RMDir"c:
\aaa"'删除文件夹c:
\aaa,如果与上1句交换位置将出错。
EndSub
如果要删除的文件夹不存在,或是该文件夹下面还有文件、文件夹存在,则该语句将产生错误信息。
改变当前目录
格式:
CHDir
例如,执行语句“CHdir"c:
\vb6"”,即把c:
\vb6设置为当前目录。
如果要改变的目录不存在,则该语句将产生错误信息。
此外,还有返回当前目录的CurDir函数,其格式为:
CurDir[(盘符)]
例如:
ChDrive"d:
"'改变d:
盘为当前盘。
ChDir"\hts"'改变默认盘的当前目录为d:
\hts”。
PrintCurDir'函数CurDir返回值为字符串"d:
\hts"。
复制文件
格式:
FileCopy<源文件名>,<目标文件名>
例如,执行语句“FileCopy"d:
\hts\vb_4.doc","a:
\vb4.doc"”,可将d:
\hts中的文件vb_4.doc复制到a:
盘,并取名为vb4.doc。
⑴文件名中,缺省盘符指当前盘;缺省路径指当前目录。
⑵文件名中,不可以缺省文件主名、不可使用通配符。
删除文件
格式:
Kill<文件名>
例如,执行语句“Kill"d:
\hts\vb_4.doc"”则删除d:
\hts中文件名为vb_4.doc的文件。
⑴文件名中,缺省盘符指当前盘;缺省路径指当前目录。
⑵文件名中可使用通配符,以删除一批文件。
如执行语句“Kill"d:
\hts\*.doc"”,则删除d:
\hts中所有的扩展名为doc的文件。
⑶如果需要删除的文件未找到,系统显示出错信息。
文件改名、移动
格式:
Nameas
例如,执行语句“Name"d:
\hts\aaa.txt"as"d:
\bbb.dat"”后,文件d:
\hts\aaa.txt被改名(在此亦即移动)为d:
\bbb.dat。
缺省盘符为当前盘、缺省路径为当前目录。
如果指定的目录、文件不存在,则该语句将产生错误信息。
如果新文件名与原文件的路径和文件名都不同,则做移动且改名操作。
获取文件属性的函数
格式:
GetAttr()函数的返回值是一个整数
例如:
x=GetAttr("d:
\bbb.dat")
函数的返回值与对应文件属性值分别如下:
⑴常规属性:
0
⑵只读属性:
1
⑶隐藏属性:
2
⑷系统属性:
4
⑸文件夹:
16
⑹上次备份后已改变:
32
设置文件属性
格式:
SetAttr,Attributes
例如:
SetAttr"d:
\bbb.dat",1'设置文件d:
\bbb.dat为只读文件
SetAttr"aaa.txt",2'设置缺省目录下的文件aaa.txt为隐藏文件
返回文件最后1次修改的日期和时间的函数
格式:
FileDateTime()返回值为字符串
例如,执行语句“dt$=FileDateTime("d:
\bbb.dat")”后,如dt$中的字符串为“00-5-23PM4:
18:
26”,表明该文件最后1次修改的日期和时间是2000年5月23日下午4点18分26秒。
检测文件长度的函数
格式:
FileLen()返回数值表示文件的字节数
例如,执行语句“PrintFilelen("d:
\bb.dat")”的输出结果为文件bb.dat的字节数。
7.3数据文件的操作
7.3.1文件的基本概念
文件、文件标识符
文件是数据信息在磁盘上的1种存