版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VisualBasic程序设计(第二版)主编柳青严健武中国水利水电出版社第7章文件系统对象的使用FileSystemObject(简称FSO)是VB6.0新增加对计算机文件系统的访问的对象。文件操作包括文件创建、删除、复制、移动和读写文件内容等,FSO对象包含了大部分文件(夹)操作的方法。本章内容包括:(1)文件的复制、移动、删除和读写;(2)文件夹的创建、复制、移动和删除;(3)如何取得驱动器、文件和文件信息;(4)与文件操作相关控件的使用;(5)二进制文件的读写方法。7.1FSO对象的使用7.1.1FileSystemObject对象简介FileSystemObject(FSO)对象模型是VB6.0新增加的基于对象的文件夹和文件操作工具,使用户除使用传统的VB语句和命令外,还可以使用具有属性、方法和事件的object.method语法来操作文件夹和文件。FSO对象模型使应用程序能够创建、复制、移动和删除文件夹,或者检测是否存在指定的文件或文件夹。FSO对象模型也可以获取关于文件或文件夹的信息,如名称、创建日期或最近修改日期等等。在工程中使用FSO对象之前,必须在菜单栏上选择“工程→引用”选项,在弹出的“引用”对话框中选择选项,如图7-1所示。图7-1“引用”对话框外部对象的使用与外部控件相似,可以认为引用的外部对象是没有界面的外部控件。在工程中添加引用对象后,开发环境没有任何的外观改变。如果需要使用FSO对象提供的方法,必须先用代码创建该对象。创建FSO对象的代码:DimFsoAsNewFileSystemObject或:Setfso=CreateObject("Scripting.FileSystemObject")以上代码均可创建Fso对象,VB中常用第1种写法。FSO对象包含的子对象见表7-1。表7-1FSO对象包含了以下几个子对象对象描述Drive允许收集关于系统所用的驱动器的信息,诸如驱动器有多少可用空间,其共享名称是什么,等等。请注意,一个“驱动器”并不一定是一个硬盘。它可以是
CD-ROM驱动器、一个RAM盘等等。而且,驱动器不一定是和系统物理地连接;也可以通过一个
LAN进行逻辑地连接。Folder允许创建、删除或移动文件夹,并向系统查询文件夹的名称、路径等。Files允许创建、删除或移动文件,并向系统查询文件的名称、路径等。TextStream允许您读和写文本文件。7.1.2用FSO对象操作文件与文件夹[例7-1]文件与文件夹操作的演示案例。[分析]FSO对象包含几个操作文件与文件的方法:1.文件复制CopyFile功能:把一个或多个文件从一个地方复制到另一个地方。语法格式:CopyFile
源文件,目标文件[,是否覆盖]说明:将[源文件]复制为[目标文件],可选参数[,是否覆盖]默认值得为True(即如果目标文件已存在,则覆盖)。示例:DimFsoAsNewFileSystemObjectFso.CopyFile"C:\A.txt","D:\"'将C:\A.txt文件复制到D:\Fso.CopyFile"C:\A.txt","D:\B.txt"'将C:\A.txt文件复制到D:\,并改名为B.txtFso.CopyFile"C:\*.txt","D:\TEST\"'将C:\所有文本文件复制到D:\TEST文件夹2.移动文件MoveFile功能:将一个或多个文件从一个地方移动到另一个地方。语法格式:MoveFile
源文件,目标文件说明:将[源文件]复制到[目标文件],然后删除[源文件]。注意:如果[源文件]包含通配符或[目标文件]以路径分隔符(\)结尾,则认为[目标文件]指定了一个存在的文件夹,在此文件夹中移动相匹配的文件。否则,认为[目标文件]是一个要创建的目标文件名。以上任意一情况下移动一个文件时,可能出现三种情形:(1)如果[目标文件]不存在,文件得到移动。这是通常的情况。(2)如果[目标文件]是一个已存在文件,则发生一个“文件已存在”错误。(3)如果[目标文件]是一个存在的目录(文件夹名),则发生一个“拒绝的权限”错误。示例:DimFsoAsNewFileSystemObjectFso.MoveFile“C:\A.txt”,“D:\”‘将C:\A.txt文件移动到D:\,如果D:\A.txt已经存在,则出现错误提示。3.删除文件DeleteFile功能:删除一个指定的文件。语法格式:DeleteFile
文件位置及文件名[,是否强制删除]说明:将指定的文件删除,可选参数表示是否强制删除文件。对于只读文件,如果确定要删除,将其设置为True,默认值为False。示例:Fso.DeleteFile"D:\A.txt",true'将C:\A.txt文件删除,如果文件不存在,则出现“文件未找到”的错误。4判断文件是否存在FileExists功能:执行复制、移动和删除等文件操作时,为避免运行错误,必须首先判断源文件或目标文件是否存在。语法格式:FileExists(文件位置及文件名)说明:指定的文件是否存在,存在则为True,否则为False。示例:IfFso.FileExists("C:\A.txt")=TrueThen '执行相关操作
……Endif5文件夹操作对文件夹的操作同样也有复制、移动、删除和判断文件夹是否存在。功能和语法格式与操作文件相似。例如,复制、移动和删除文件夹的方法分别为:CopyFolder、MoveFolder和DeleteFolder,操作前,也必须判断文件夹是否存在FolderExists
。[建立工程]新建工程,按默认名称保存工程为“工程1”,窗体名称保存为Form1。构造用户界面,在窗体中添加4个按钮,如图7-2所示。其中,1-Command1;2-Command2;3-Command3;4-Command4。图7-2操作文件及文件夹的界面布局[程序代码]DimFsoAsNewFileSystemObjectPrivateSubCommand1_Click()'判断文件是否存在,存在则复制,否则提示
IfFso.FileExists("C:\A.txt")=TrueThen
Fso.CopyFile"C:\A.txt","D:\TEST\",TrueElse
MsgBox"没有找到文件!"EndIfEndSubPrivateSubCommand2_Click()'判断文件是否存在,存在则复制,否则提示
IfFso.FolderExists("C:\abc")=TrueThen
Fso.CopyFolder"C:\abc","D:\TEST\",TrueElse
MsgBox"没有找到文件!"EndIfEndSubPrivateSubCommand3_Click()'判断文件是否存在,存在则复制,否则提示
IfFso.FileExists("C:\A.txt")=TrueThenIfFso.FileExists("D:\test\A.txt")=FalseThen
Fso.MoveFile"C:\A.txt","D:\test\"
ElseIfMsgBox("文件已经存在?替换吗",vbQuestion+vbYesNo,"确认")=vbYes&_Then'先删除,在移动
Fso.DeleteFile"d:\test\a.txt",True
Fso.MoveFile"C:\A.txt","D:\test\"EndIfEndIfElse
MsgBox"没有找到文件!"EndIfEndSubPrivateSubCommand4_Click()IfFso.FolderExists("D:\test\Abc")=TrueThen
Fso.DeleteFolder"D:\test\ABC",TrueEndIfEndSub7.1.3文件对象(File)的使用[例7-2]取得选择的文件相关信息并显示在标签(Label)上,运行结果如图7-3所示。[分析]文件对象File可以取得与指定文件相关的一些信息,如文件大小、文件属性、创建日期或修改日期等。图7-3显示文件信息文件对象File通过FSO对象的GetFile方法建立。本例演示了File对象的创建和使用。[建立工程]新建工程,按默认名称保存工程为“工程1”,窗体名称保存为Form1。构造用户界面,在窗体上添加两个Label控件,一个通用对话框控件和一个命令按钮,采用默认名称,界面布局如图7-4所示。Label2Command1Label1CommonDialog1图7-4界面布局[程序代码]1 PrivateSubCommand1_Click()2 DimFsoAsNewFileSystemObject3 DimfAsFile'文件类型变量4 DimFileNameAsString,tmpStrAsString5 6 CommonDialog1.ShowOpen7 FileName=CommonDialog1.FileName8 9 IfFileName<>""Then10 tmpStr=tmpStr&"文件名是:"&Fso.GetFileName(FileName)&vbCrLf11 tmpStr=tmpStr&"文件扩展名是:"&Fso.GetExtensionName(FileName)&_
vbCrLf12 Setf=Fso.GetFile(FileName)'建立文件操作对象File13 14 tmpStr=tmpStr&"文件所在文件是:"&f.ParentFolder&vbCrLf15 tmpStr=tmpStr&"文件大小是:"&f.Size&"字节"&vbCrLf16 tmpStr=tmpStr&"文件建立日期:"&f.DateCreated&vbCrLf17 tmpStr=tmpStr&"文件修改日期:"&f.DateLastModified&vbCrLf18 tmpStr=tmpStr&"文件属性:"&f.Attributes&vbCrLf19 20 Label2.Caption=tmpStr21 EndIf22 EndSub[代码说明]行2:建立FSO对象Fso。行3:定义File变量,准备保存用Fso对象的方法创建的File对象。行6:打开选择文件对话框。行7:暂时保存文件名及位置信息。行10:FSO对象的GetFileName方法,仅仅从位置中取得文件名,不包含文件位置。行11:FSO对象的GetExtensionName方法,可以取得文件名的扩展名。行12:FSO对象的GetFile方法,通过指定文件绝对位置,创建文件对象File。行14~18:文件相关属性:ParentFolder属性:取得文件所在的文件位置。Size属性:取得文件大小,单位为字节Byte,其中:1KB=1024Byte;1MB=1024KB;1GB=1024MB。DateCreated属性:文件创建日期。DateLastModified属性:文件最后一次修改日期。Attributes属性:文件属性,可以设置或获取。如常规、只读、隐藏等,其值代表的含义见如表7-2。表7-2Attributes属性值及含义常数值描述Normal0一般文件。未设置属性。ReadOnly1只读文件。属性为读/写。Hidden2隐藏文件。属性为读/写。System4系统文件。属性为读/写。Volume8磁盘驱动器卷标。属性为只读。Directory16文件夹或目录。属性为只读。Archive32自上次备份后已经改变的文件。属性为读/写。Alias64链接或快捷方式。属性为只读。Compressed128压缩文件。属性为只读通过文件对象的帮助,可以查看其所有属性和方法,如图7-5所示。其中,f必须定义为File类型变量方可即时查看。图7-5文件对象属性和方法7.1.4文件夹对象(Folder)的使用[例7-4]列出C盘下面所有子文件夹,运行结果如图7-6所示。图7-6列出子文件夹[分析]与File对象创建和使用类似,通过文件夹对象Folder,也可以取得指定文件夹相关的一些信息,如文件夹大小、文件夹属性、创建日期或修改日期,此外,还可以取得其子文件夹的信息,以及包含文件的信息。文件对象Folder是通过FSO对象的GetFolder方法建立的。下面的例子演示了GetFolder对象的创建和使用。[建立工程]新建工程,按默认名称保存工程为“工程1”,窗体名称保存为Form1。按图7-6所示构造用户界面,在窗体中添加一个ListBox列表框控件框和一个按钮控件,所有控件名称采用默认。[程序代码]1 DimfsoAsNewFileSystemObject3 PrivateSubCommand1_Click()4 DimfdAsFolder,sfdAsFolder6 Setfd=fso.GetFolder("c:\")7 8 List1.Clear9 List1.AddItemfd.Name&"包含的子文件夹个数为:"&fd.SubFolders.Count10 ForEachsfdInfd.SubFolders11 List1.AddItemsfd.Path12 Next13 EndSub[代码说明]行1:创建FSO对象Fso。行4:fd为文件夹类型变量,准备保存使用FSO方法GetFolder建立的文件夹对象,Sfd准备保存子文件夹对象。注意:子文件夹也是文件夹Folder类型。行6:建立文件夹Folder对象。行9:SubFolders为文件夹的子文件集合对象,相当于数组。行10~12:使用列举循环,依次取得每个子文件夹。Path为文件夹的位置属性,Name为文件夹名称属性(不包含位置);[例7-5]列出C:\所有的文件,运行结果如图7-7所示。图7-7列出所有文件[建立工程]新建工程,按默认名称保存工程为“工程1”,窗体名称保存为Form1。按图7-7所示构造用户界面,在窗体中添加一个ListBox列表框控件框和一个按钮控件,所有控件名称采用默认。[程序代码]1 PrivateSubCommand1_Click()2 DimfdAsFolder,fAsFile3 Setfd=fso.GetFolder("c:\")4 List1.AddItemfd.Name&"包含的子文件个数为:"&fd.Files.Count5 6 ForEachfInfd.Files7 List1.AddItemf.Path8 Next9 EndSub[代码说明]本例中的Files是文件夹中所有文件的集合对象,文件对象中的Path属性包含文件的位置及文件名。代码其他行含义与例7-5相似,不再赘述。[例7-6]
列举出C:\ABC文件夹中每一子文件夹的文件信息。新建工程,按默认名称保存工程为“工程1”,窗体名称保存为Form1。界面布局如例7-4和例7-5相同,运行结果如图7-8所示。本例代码请读者自行分析。图7-8列举每一子文件夹文件[程序代码]PrivateSubCommand1_Click()DimfdAsFolderIffso.FolderExists("C:\ABC")ThenSetfd=fso.GetFolder("C:\ABC")
ListFile
fdEndIfEndSubSubListFile(fdAsFolder)ForEachfInfd.FilesList1.AddItemf.PathNextDimsfdAsFolderForEachsfdInfd.SubFolders
ListFile
sfdNextEndSub[总结与提高]例7-4和例7-5只实现了列举文件夹中第1层子文件夹内容和文件内容,如果要列举每一个子文件夹的内容和文件内容,需要使用递归循环实现。例7-6演示了列举文件夹中子文件夹内容,以及子文件夹中的每一个子文件的文件内容。7.2.5文本文件读写(TextStream)对象的使用[例7-7]将文本框Text1的录入的数据保存到C:\test.txt。如果文件已存在,则将数据添加到文件末尾,如果不存在,则创建新文件。[分析]FSO的子对象TextStream对象用于读写顺序的文本文件。一般读/写文本文件的步骤是:打开文件;读/写文件内容;关闭文件。可以用FSO提供的OpenTextFile方法来创建TextStream对象。OpenTextFile方法的语法格式:OpenTextFile(文件名[,读写方式[,是否建立]])说明:打开一个指定的文件并返回一个TextStream
对象,该对象可用于对文件进行读操作或追加操作。其中:[文件名]:指定需要操作的文本文件。[读写方式]:可以是ForAppending(添加数据到已存在文件的末尾);ForWriting(新建文件并准备添加数据,如果文件存在,则覆盖);ForReading(只读方式,以该方式打开的文件只能读,不能写)。[是否建立]:如果读写方式为ForWriting,若打开的文件不存在,则新建文件;若存在,暂且覆盖原来内容;如果读写方式为ForAppending,则在文件不存在时新建文件。要把数据保存到文件,可以使用TextStream对象的WriteLine方法写入内容;使用WriteBlankLines(x)写入X行空行(换行)。[建立工程]新建工程,按默认名称保存工程为“工程1”,窗体名称保存为Form1。按图7-9所示构造用户界面。多行文本框,带水平和垂直滚动条Text1Command1图7-9界面布局[程序代码]1 DimfsAsNewFileSystemObject2 PrivateSubCommand1_Click()3 IfText1.Text=""ThenExitSub4 DimtxtAsTextStream5 Iffs.FileExists("c:\test.txt")=TrueThen6 '如果文件存在,则以添加方式保存内容7 Settxt=fs.OpenTextFile("c:\test.txt",ForAppending)8 Else9 '如果文件不存在,则新建文件10 Settxt=fs.OpenTextFile("c:\test.txt",ForWriting,True)11 EndIf12 13 txt.WriteLineText1.Text14 txt.Close15 EndSub[代码说明]行4:定义TextStream变量,准备保存创建的TextStream对象。行7:如果文件存在,则以添加方式打开文件。OpenTextFile方法打开文件后,将返回TextStream对象。通过TextStream对象txt的WriteLine方法,将所有数据作为文件中的一行写入。行10:如果文件不存在,则以新建文件的方式打开文件。注意:如果无论文件是否存在都要重新建立,则不需要判断文件是否存在,直接使用本行代码即可。[总结与提高]以下代码说明如何从文件中读出一行数据:DimtxtAsTextStreamIffs.FileExists("c:\test.txt")=TrueThenSettxt=fs.OpenTextFile("c:\test.txt",ForReading)Text1.Text=txt.ReadAll
txt.CloseEndIf注意:打开文件时,使用ForReading方式。ReadAll是一次性读出文件所有的内容。如果需要一行行读出数据,可以将代码修改为:DimtxtAsTextStreamDimstrAsStringIffs.FileExists("c:\test.txt")=TrueThenSettxt=fs.OpenTextFile("c:\test.txt",ForReading)
WhileNottxt.AtEndOfLine
str=str&txt.ReadLine&vbCrLfWend
txt.Close
MsgBox"文件的内容为:"&strEndIf[代码说明]TextStream对象的ReadLine方法是每次读文件中的一行数据,再次读取时将自动移动到下一行准备读,AtEndOfLine属性判断是否文件所有的行已经读取完毕。7.1.6获取驱动器信息[例7-8]将本机驱动器列表添加到Combo组合框。选择对应驱动器时,如果是硬盘分区,则列出分区的总空间大小、有效空间大小,运行界面如图7-10所示。图7-10运行界面[分析]可以用FSO对象的Drives集合对象得到本机所有的驱动器列表,然后用FSO的GetDrive方法得到每一个驱动器的具体Drive对象,从而得到驱动器的信息,例如判断是否是光盘、移动磁盘、或硬盘盘符等。Drive对象允许获得一个系统的各个驱动器的信息,这些驱动器可以是物理的,也可以是位于网络上的。通过该对象的属性可以获得下列信息:以字节表示的驱动器总空间(TotalSize
属性)。以字节表示的驱动器可用空间(AvailableSpace
或FreeSpace
属性)。给驱动器指定的字母号(DriveLetter
属性)。驱动器类型,诸如可移动的、固定的、网络、CD-ROM、或者RAM盘(DriveType
属性)。驱动器序列号(SerialNumber
属性)。驱动器使用的文件系统类型,诸如FAT、FAT32、NTFS等(FileSystem
属性)。驱动器是否可用(IsReady
属性)。共享和/或卷标的名称(ShareName
和VolumeName
属性)。驱动器的路径或根文件夹(Path和RootFolder
属性)。[建立工程]新建工程,按默认名称保存工程为“工程1”,窗体名称保存为Form1。按图7-10所示构造用户界面。在窗体上添加组框控件Combo1,设置其Style属性为2-DropDownList;添加标签控件Label1,设置其BorderStyle属性为1-FixedSingle。[程序代码]1 DimfsAsNewFileSystemObject2 PrivateSubForm_Load()3 DimdrAsDrive4 ForEachdrInfs.Drives5 Combo1.AddItemdr.DriveLetter6 Next7 IfCombo1.ListCount>0ThenCombo1.ListIndex=08 EndSub9 PrivateSubCombo1_Click()10 DimdrAsDrive11 DimInfoAsString12 Setdr=fs.GetDrive(Combo1.Text)13 14 Ifdr.DriveType=FixedThen15 Info=Info&"总空间大小:"&dr.TotalSize&"字节"&vbCrLf16 Info=Info&"有效空间大小:"&dr.AvailableSpace&"字节"&vbCrLf17 Info=Info&"名称:"&dr.VolumeName&vbCrLf18 EndIf19 Label1.Caption=Info20 EndSub[代码说明]行3:定义dr为Drive类型变量,准备在列举过程中保存具体的驱动器Drive对象。行4~6:FSO的Drives属性包含本机所有驱动器对象,Drive对象的DriveLetter属性代表驱动器盘符的首字母,将盘符首字母添加到组合框。行7:设置组合框当前选择的项为第1项,同时触发其Click事件。行12:通过FSO的方法GetDrive,建立驱动器对象。行14:DriveType属性代表驱动器类型。其值可能是:0-UnknownType;1-Removable;2-Fixed;3-Network;4-CD-ROM;5-RAMDisk。行15~17:取得驱动器属性值。7.2文件系统控件的使用7.2.1系统提供的文件系统控件应用程序的驱动器、目录和文件操作信息既可以用CommonDialog提供的标准对话框,也可以用VisualBasic6.0提供的文件系统控件组合创建自定义对话框。这些控件包括驱动器列表框控件(DriveListBox)、目录列表框控件(DirListBox)、文件列表框控件(FileListBox),这三个文件系统控件能够自动地从操作系统中获取一些信息,应用程序可以访问这些信息,或通过控件属性获取各控件的信息。1.驱动器列表框驱动器列表框是一个下拉式的列表框,默认状态下显示当前驱动器名。程序运行时,该控件获得焦点(光标移入该控件)时,可输入任何有效的驱动器标识符,或者单击右侧的下拉箭头选择列表框中的驱动器标识符。单击箭头可下拉列表框以列举所有的有效驱动器。若从中选定新驱动器,该驱动器将出现在列表框的顶端。可以通过检查Drive属性判断当前选择的驱动器。应用程序也可简单的赋值语句来指定出现在列表框顶端的驱动器,即:Drive1.Drive=“c:\”。驱动器列表框显示可用的有效驱动器。从列表框中选择驱动器不能自动地改变当前的工作驱动器;但可用Drive属性在操作系统级改变驱动器,方法:将Drive属性作为ChDrive
语句的参数,即:ChDriveDrive1.Drive。在驱动器列表框中选择新的驱动器后,将触发一个Change事件。2.目录列表框目录列表框可以显示指定驱动器上的目录结构,一般从根目录开始显示用户系统的当前驱动器目录结构。当前目录名被突出显示(默认),而且显示的目录是按目录层次依次缩进。在目录列表框中,当前目录下的子目录也缩进显示。在列表框中上、下移动时,将依次突出显示每个目录项,如图7-11所示。图7-11目录列表框中显示的目录结构(1)标识单个目录。列表框中的每个目录关联(对应)一个整型标识符ListIndex(列表索引值),可以用来标识单个目录。Path属性(Dir1.Path)指定目录(当前目录)的ListIndex
值为-1;紧邻其上目录的ListIndex
值为–2;再上一级目录的ListIndex为–3;依此类推。Dir1.Path的下一级子目录(当前目录的下一级目录)的ListIndex值为0。若其下一级子目录有多个目录,则每个目录的ListIndex
值按1、2、3...的顺序依次排列,如图7-11所示。CommonDialog
控件中提供这方面的功能。(2)设置当前目录。用目录列表框的Path属性可以设置或显示列表框的当前目录(ListIndex=-1)。例如,若将目录列表框Dir1的Path属性直接赋值“c:\Programfile\MicrosoftVisualStudio\Vb98\Template\Classes”,则该目录成为当前目录。将驱动器列表框Drive1的Drive属性值赋给目录列表框的Path属性,可将驱动器列表框中指定驱动器中的当前目录显示出来。执行赋值语句时,目录列表框将显示该驱动器上所有有效的目录和子目录。缺省时,目录列表框将显示驱动器当前目录的所有上级目录以及下一级子目录,而驱动器是被指定给Dir1.Path属性的。目录列表框并不在操作系统级设置当前目录;只是突出显示当前目录并将其ListIndex
值设置为-1。设置当前工作目录应使用ChDir语句。例如,以下语句可将当前目录变为目录列表框中的一个目录:ChDirDir1.Path。在使用文件控件的应用程序中,可用Application对象将当前目录设置为应用程序的可执行(.exe)文件所在目录,即:ChDrive
App.Path '设置驱动器。ChDir
App.Path'设置目录。(3)单击目录项目。单击目录列表框中某个项目时,将突出显示该项目。双击某个项目时,则把它赋予Path属性并把其ListIndex
属性设置为-1,然后重绘目录列表框以显示直接相邻的下级子目录。(4)查找目录的相对位置。ListCount
属性返回当前扩展目录下的目录数目,而不是目录列表框中的目录总数。因为当前扩展目录的ListIndex
值总为-1,所以可以编程来判断在目录层次结构中,当前展开目录与根目录有多大距离。3.文件列表框程序运行时,文件列表框显示由Path属性指定的包含在目录中的文件。可以用以下语句在当前驱动器上显示当前目录中的所有文件:File1.Path=Dir1.Path然后,可设置Pattern属性显示这些文件的子集。例如,设置*.frm
后,将只显示扩展名为frm的文件。Pattern属性也接受由分号分隔的列表。例如,以下程序代码将显示所有扩展名为.frm
和.bas的文件:File1.Pattern="*.frm;*.bas"VisualBasic也支持通配符“?”。例如,???.txt将显示所有文件主名包含三个字符且扩展名为.txt的文件。文件列表框的属性也提供当前选定文件的属性(Archive、Normal、System、Hidden和ReadOnly)。可以在文件列表框中用这些属性指定要显示的文件类型。System和Hidden属性的默认值为False。Normal、Archive和ReadOnly
属性的默认值为True。Normal=True时,将显示无System或Hidden属性的文件。当Normal=False时,仍然可显示具有ReadOnly或Archive属性的文件,方法是将这两个属性设置为True。4.使用文件系统的控件组合将文件系统控件进行组合,可同步显示驱动器、目录和文件的信息。对于驱动器列表框(Drive1)、目录列表框(Dir1)和文件列表框(File1),可以下步骤建立控件组合:(1)建立Drive1_Change事件,更新Drive1的显示以反映新选定的驱动器。即将新选定项目的(Drive1.Drive属性)赋予Dir1列表框的Path属性,程序代码如下:PrivateSubDrive1_Change()Dir1.Path=Drive1.DriveEndSub(2)在Dir1_Change事件中更新Dir1的显示以反映新驱动器的当前目录。即将新路径(Dir1.Path属性)赋予File1列表框的File1.Path属性,程序代码如下:PrivateSubDir1_Change()File1.Path=Dir1.PathEndSub(3)File1.Path属性赋值语句更新File1列表框中的显示,以反映Dir1控件中的指定的路径。单击驱动器列表框中的项目将触发Change事件。此外,当用户选定项目并改变窗体上的焦点时,也将触发Change事件。7.2.2文件系统控件应用[例7-9]使用驱动器控件,制作如图7-12所示的文件选择对话框.。Dir1File1Dirve1图7-12自定义打开文件对话框[分析]通常,驱动器列表框控件、目录列表框控件和文件列表框控件一起使用,以查看驱动器、目录和文件,其中的一些特殊属性和事件使它们相互联系起来,可以用多种方法混合、匹配文件系统控件,使文件操作十分灵活,这是CommonDialog控件无法做到的。但是,CommonDialog控件使用简单方便,若只需要标准的“打开文件”或“保存”对话框,用CommonDialog控件即可满足要求。本例简单介绍文件系统控件的应用。[建立工程]新建工程,按默认名称保存工程为“工程1”,窗体名称保存为Form1。界面布局:为使界面整齐美观,首先在窗体添加一个框架控件Frame1,然后将Drive、Dir和File控件从“工具箱”中添加到Frame1内。调整布局如图7-12所示。[程序代码]1 PrivateSubForm_Load()2 File1.Pattern="*.*"3 Drive1.Drive="c:\"4 Dir1.Path=Drive1.Drive5 Text1.Text=""6 EndSub7 8 PrivateSubDrive1_Change()9 Dir1.Path=Drive1.Drive10 EndSub11 12 PrivateSubDir1_Change()13 File1.Path=Dir1.Path14 EndSub15 16 PrivateSubFile1_Click()17 IfFile1.ListCount>0Then18 Text1.Text=File1.Path&"\"&File1.FileName19 Text1.Text=Replace(Text1.Text,"\\","\")'20 EndIf21 EndSub[代码说明]行2:设置文件对话框显示的文件类型显示所有的文件类型。如仅显示txt、Word和Excel文件,可以设置为:File1.Pattern=""*.txt;*.doc;*.xls"",每种类型之间用分号分隔。行3:设置首选驱动器分区为C。行4:设置首选目录为C根目录。实际上,程序执行到行3时已触发Drive1的Change事件(行8~10),而Drive1的Change事件中已设置File1.Path属性,本行是多余的。行8~9:每次改变驱动器时,将当前驱动器根目录作为Dir欲显示的目录。该段代码将触发Dir的Change事件。因此,将同时执行行12~13的代码,设置File1控件显示Dir1.Path中指定目录下的文件。行12~13:根据File1的Pattern属性设置,显示指定目录下的满足筛选类型条件的文件。行18:获取选择文件的位置和文件名。行19:如果是根目录下的文件,按照行18的组合,将多一个“\”符号。因此,替换两个“\\”为一个,以满足路径描述格式规则,如“C:\A.txt”;如不经过替换,文本将得到“c:\\A.txt”。7.3典型例题[例7-10]一个简单的文字处理软件设计实例[分析]本例是一个简单的文字处理软件,该软件实现了文本输入、文本编辑、整体文本格式及颜色设置、保存及打文件等功能,处理的文件后缀定义为“.MyTxt”。文件除保存文本外,也保存了文本的字体格式信息。[建立工程]1.新建工程,按默认名称保存工程为“工程1”,窗体名称保存为Form1。2.设计程序界面,如图7-17所示。图7-17
程序界面包括主窗体、下拉式主菜单、工具栏、文本编辑框等部分。(1)主窗体:采用默认设置,窗体名称为:Form1(2)菜单:各菜单及子菜单名称及对应快捷键见表7-12。表7-12菜单及子菜单名称及对应快捷键层次显示文字名称热键快捷键1文件nmuFileF(NULL)2新键nmuNewNCtrl+N打开nmuOpenOCtrl+O保存nmuSaveSCtrl+S另存为nmuSaveAsA(NULL)退出nmuExitx(NULL)1编辑nmuEditE(NULL)2剪切nmuCutXCtrl+X复制nmuCopyCCtrl+C粘贴nmuPastePCtrl+V1格式nmuFormatO(NULL)2字体nmuFontF(NULL)颜色nmuColorC(NULL)1帮助nmuHelpH(NULL)2关于MytText1.0nmuAboutA(NULL)(3)工具栏对象名称:ToolBar1。对应菜单的设置,分为九组,分别对应“新建”、“打开”、“保存”、“剪切”、“复制”、“粘贴”、“字体”、“颜色”、“帮助”菜单项,对应关键字(Key)按顺序为:bNew、bOpen、bSave、bCut、bCopy、bPaste、bFont、bColor、bHelp。(4)文本编辑框:多行文本框,且有垂直滚动条,默认情况下显示空文本,对象名为Text1。3.属性设置:Text1.Text=””Text1.MutiLine=TrueText1.ScrollBars=2[程序代码](1)声明全局变量:DimCurrentFileNameAsString‘声名字符串变量用于保存当前操作文件的文件名DimbTextChangeAsBoolean‘声明布尔类型变量用于标识文本内容是否改变(2)在窗口Form的事件Load中初始化全局变量:PrivateSubForm_Load()bTextChange=FalsebTextChange=“”EndSub(3)编写相应的事件过程:PublicSubFileOpen()‘打开文件
DimTextStrAsStringCommonDialog1.ShowOpen‘显示打开文件对话框
CurrentFileName=CommonDialog1.FileName‘获取文件名作为当前操作文件名
IfCurrentFileName<>""Then‘判断文件是否存在
FileNo=FreeFile‘取得可用文件号
OpenCurrentFileNameForInputAsFileNo‘打开文件
Input#FileNo,TextStr,vFontBold,vFontName,vFontSize,vFontItalic,vFontUnderline,vFontStrikethru,vColor‘读取文件内容,TextStr为文本内容,后边为字体粗细、字体名称、大小等字体格式信息。
CloseFileNo‘关闭文件
Text1.Font.Bold=vFontBold‘按文件保存文本的字体格式在文本编辑框中显示文件内容
Text1.Font.Name=vFontNameText1.Font.Size=vFontSizeText1.Font.Italic=vFontItalicText1.Font.Underline=vFontUnderlineText1.FontStrikethru=vFontStrikethruText1.ForeColor=vColorText1.Text=TextStr
vTextChange=False‘文本未改变
EndIfEndSubPublicSubFileNew()‘新建文件
IfbTextChangeThen‘次保存后文本内容是否改变,如改变则显示是否保存提示
SaveOrNot=MsgBox("文件"+CurrentFileName+"没有保存,是否保存?",3,"注意!!")SelectCaseSaveOrNotCasevbNoText1.Text=“”
CurrentFileName=“”CasevbYes
FileSaveText1.Text=“”
CurrentFileName=“EndSelectElsePublicSubFileSave()‘保存文件
FileNo=FreeFile‘取得可用文件号
IfCurrentFileName<>""ThenOpenCurrentFileNameForOutputAsFileNo‘打开文件
Write#FileNo,Text1.Text,Text1.Font.Bold,Text1.Font.Name,Text1.Font.Size,Text1.Font.Italic,Text1.Font.Underline,Text1.FontStrikethru,Text1.ForeColor‘保存文件
CloseFileNo
BTextChange=False‘文件已保存,设置未改变标识
EndIfEndIfEndSubPublicSubFileSaveAs()‘文件另存为
CommonDialog1.ShowSave‘显示“打开“对话框
CurrentFileName=CommonDialog1.FileName‘获取指定文件为当前文件名
FileSave‘保存文件EndSubPublicSubSetFont()‘设置字体格式
CommonDialog1.Flags=3‘加载字体
CommonDialog1.ShowFont‘显示“字体“对话框
Text1.Font.Bold=CommonDialog1.FontBold‘设置字体粗细
Text1.Font.Name=CommonDialog1.FontName‘设置字体名称
Text1.Font.Size=CommonDialog1.FontSize‘设置字体大小
Text1.Font.Italic=CommonDialog1.FontItalic‘设置是否为斜体
Text1.Font.Underline=CommonDialog1.FontUnderli
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中数学 第一章 集合与函数概念 新人教版必修1
- 土建类施工组织设计
- 2024年度旅游包车服务详细合同
- 2024年度电气设备安装工程设计合同
- 2024中国电力建设集团水电水利规划设计总院招聘3人易考易错模拟试题(共500题)试卷后附参考答案
- 2024中国电信江苏公司春季招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2024中国冶金地质总局在京单位招考应届毕业生易考易错模拟试题(共500题)试卷后附参考答案
- 2024中国一冶集团限公司交通工程公司招聘80人易考易错模拟试题(共500题)试卷后附参考答案
- 2024下半年江苏兴海控股集团限公司招聘17人易考易错模拟试题(共500题)试卷后附参考答案
- 2024上半年福建福州市连江县部分国企业招聘9人易考易错模拟试题(共500题)试卷后附参考答案
- 2024-2030年中国煤炭采煤机行业供需趋势及发展规划研究报告
- 2024年第九届“学宪法、讲宪法”知识竞赛测试考试题库及答案
- 2024年品牌营销全案策划合同
- 河北省石家庄市2024年七年级上学期期中数学试题【附答案】
- 湖南省2024年中考数学试卷(含答案)
- 建筑制图学习通超星期末考试答案章节答案2024年
- 管理心理学(自考)第十章-领导行为与管理
- 《算法设计与分析基础》(Python语言描述) 课件 第8章动态规划1
- 人教版 四年级 语文 上册 第七单元《古诗三首》教案
- 8 安全记心上 第三课时 119的警示(课件)-部编版道德与法治三年级上册
- 新公司法修订要点和解读
评论
0/150
提交评论