对于这个实现,其实很简单。首先想到的就是VB中给我们提供的现成的控件。主要有这么两类:
一类是驱动器列表框(DriveListBox)、目录列表框(DirListBox)和文件列表框(FileListBox)三个控件组合而成的自定义对话框;
另一类是windows提供的标准对话框。
他们在工具箱中的位置和图标如下所示:
1、驱动器列表框是一个下拉式的列表框,他和一般下拉式的列表框的不同仅在于功能上的不同,它提供了一个驱动器的列表。当单击右边的箭头时,则弹出计算机中的所有驱动器的下拉列表。默认状态下,在驱动器列表中显示的是当前驱动器,我们可以输入或从下拉列表中选择有效的驱动器标示符。
下面是它的主要属性,事件和方法.
属性Drive本属性用于返回或设置运行时选择的驱动器.默认值为当前驱动器
改变Drive属性会触发Change事件.
示例: Drive1.Drive = “c:”
设置C盘为当前驱动器.
事件Change当选择一个新驱动器或通过代码改变了Drive属性时触发该事件
下面是示例代码:
Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
‘当选择一个新驱动器时,将驱动器列表中选中的当前驱动器,赋给目录列表的路径.
End Sub
2、目录列表框
目录列表框用于显示当前驱动器的目录结构,目录列表框从最高层目录开始,显示当前驱动器的目录结构,并按层次关系缩进跟目录下的所有子目录。下面是它的主要属性,方法和事件:
属性Path本属性用于返回或设置运行时选择的路径,默认路径为当前路径.改变Dri属性会触发Change事件.
示例: Dri1.Path = Drive1.Drive
设置在驱动器列表框中选中的驱动器盘符为目录列表的当前路径.
ListIndex本属性用来返回或设置控件中当前被选择的项目索引号.目录列表框中的每一个目录都可以通过ListIndex属性来标识.由Path属性所设置的当前目录的ListIndex属性值总是-1,而它上面的目录的ListIndex属性值为-2,再上面的为-3,以此类推;而它所包含的子目录恰恰相反,紧挨着的第一个子目录的ListIndex属性值为0,往下一次加一.
ListCount本属性返回当前目录下的所有子目录书.ListCount的值比最大的ListIndex的值大1.
事件Change当选择一个新目录或通过代码改变了Path属性时触发该事件
下面是示例代码:
Private Sub Dir1_Change()
'将文件列表框的路径值,设置为目录列表框所选中的路径值
File1.Path = Dir1.Path
End Sub
3、文件列表框
文件列表框用来显示当前目录中的部分或者全部文件.文件列表框的大部分属性和一般的列表框相同,都具有大小,位置,字体,颜色等以及List,ListCount,ListIndex等属性.下面是主要的属性:
属性Path本属性用于返回或设置运行时选择的路径以显示其下的文件,默认路径为当前路径.改变Dri属性会触发PathChange事件.
示例: File1.Path= Dri1.Path
设置在目录列表框中选中的路径为文件列表的当前路径.
Pattern本属性用来确定程序运行时,列表框中显示那些类型的文件.除了使用”*” ”?”等通配符外,在参数中还可以使用分号”;”来分割多种文件类型.例如:”*.ext;*.bat”
FileName本属性返回或设置所选文件的路径和文件名.可以从本属性值中返回当前列表中选择的文件名.路径可用Path属性单独检索.在功能上,本属性值与ListIndex等价.如果没有文件被选中,FileName属性将返回0长度的字符串.改变甭属性值可能会产生一个或多个如下事件:PathChange(如果改变路径),PatternChange(如果改变模式),DblClick(如果指定存在的文件)
事件Click当选择一个新的文件时触发该事件
下面是示例代码:
Private Sub File1_Click()
Picture1.Picture = LoadPicture(Dir1.Path & " " & File1.FileName)
‘在图片框中显示选定的图形文件.
End Sub
4、标准对话框
CommonDialog控件提供了一组标准的操作对话框,进行诸如打开,和保存文件,设置打印选项,以及选择颜色和字体等操作.通过运行windows帮助引擎还能显示帮助.
CommonDialog控件在visual basic和Microsoft Windows动态链接库commdlg.dll的例程之间提供了一个接口.为了用这个控件创建一个对话框,commdlg.dll必须存在于microsoft Windows的system目录下.然后再visual basic中选择工程/部件,并在显示的部件对话框中选中Microsoft common Dialog Control 6.0,确定后,在工具栏里就显示了出来.如下图所示:
在应用程序中要使用CommonDialog控件,可将其添加到窗体中并设置其属性.控件所显示的对话框有控件的方法确定.在运行时,当相应的方法被调用时,将显示一个对话框或是执行帮助引擎;在设计时,CommonDialog 控件是以图标的形式显示在窗体中的.该图标的大小不能改变.
使用指定的方法,CommonDialog控件能够显示下列对话框:
方法所显示的对话框
ShowOpen显示[打开]对话框
ShowSave显示[另存为]对话框
ShowColor显示[颜色]对话框
ShowFont显示[字体]对话框
ShowPrinter显示[打印]或[打印选项]对话框
Showhelp显示windows帮助引擎
下面是它的主要属性,方法:
属性Filer该属性应用于CommonDialog控件中的[打开][另存为]对话框.本属性用来返回或设置在对话框[类型]列表框中显示的过滤器.过滤的作用是确定对话框中文件列表框中显示的文件类型.例如:设置为*.txt时,将显示文本文件.要显示多种类型的文件,可以用管道(|)符号(ASCII124)将他们分开.管道符号前后不能加空格.如:*.rm|*.rmvb
Action该属性返回或设置一个表示所显示对话框类型的整数.具体如下.
设置数值说明
0没有操作
1显示[打开]对话框
2显示[另存为]对话框
3显示[颜色]对话框
4显示[字体]对话框
5显示[打印]或[打印选项]对话框
6运行WINHLP32.EXE
FileName本属性应用于CommonDialog控件的[打开][另存为]对话框.
本属性返回或设置所选文件的路径和文件名.如果在运行时被创建,FileName属性将返回0长度的字符串,表示当前没有选择文件.在CommonDialog控件里,可以在打开对话框之前设置FileName属性来设定初始文件名.
可以从本属性值中返回当前列表中选择的文件名.路径可用Path属性单独检索.在功能上,本属性值与ListIndex等价.如果没有文件被选中,FileName属性将返回0长度的字符串.
改变甭属性值可能会产生一个或多个如下事件:PathChange(如果改变路径),PatternChange(如果改变模式),DblClick(如果指定存在的文件)
事件Click当选择一个新的文件时触发该事件
下面是一个例子:
我们在这里要做一个VCD的播放器,下面是界面.
下表是其中所用到的控件及其属性设置:
对象特性设置值
窗体名称Frmvcd
BorderStyle1
CaptionVCD播放器
菜单标题文件
名称Mnufile
标题打开
名称Mnuopen
标题播放
名称Mnuplay
标题退出
名称Mnuexit
标题选项
名称Mnuoption
标题连续播放
名称Mnurepeat
标题静音
名称Mnuslient
多媒体控件名称Mmcontrol
Picture控件名称Picture1
通用对话框名称Commondialog1
下面是主要程序代码代码:
Private Sub mnuopen_Click() ’当点击菜单中的打开时执行
'在未选择文件时,文件名为空字符,播放菜单不可用
mnuplay.Enabled =False
CommonDialog1.FileName = ""
'下面语句设置文件过滤方式,可显示扩展名为avi,dat,wav和mid文件
CommonDialog1.Filter = "(*.avi)|*.avi|(*.wave)|*.wav|(vcd *.dat)|*.dat|(midi *.mid)|*.mid"
'初始化文件过滤方式为*.avi
CommonDialog1.FilterIndex = 1
'建立打开方式的通用对话框,也可使用commondialog1.showopen
CommonDialog1.Action = 1
'打开一个文件前先关闭前一次被打开的多媒体设备
MMControl1.Command = "close"
Select CommonDialog1.FilterIndex
Case 1 '选择*.avi
'设置多媒体设备类型为avividio
MMControl1.DeviceType = "avividio"
'设置时间格式为帧
MMControl1.TimeFormat = 3
'设置播放的文件为通用对话框中选择的文件
MMControl1.FileName = CommonDialog1.FileName
'打开文件
MMControl1.Command = "open "
Case 2 '选择*.wav
'设置多媒体设备类型为waveaudio
MMControl1.DeviceType = "waveaudio"
'设置时间格式为帧
MMControl1.TimeFormat = 3
'设置播放的文件为通用对话框中选择的文件
MMControl1.FileName = CommonDialog1.FileName
'打开文件
MMControl1.Command = "open "
Case 3 '选择*.dat
'设置多媒体设备类型为Mpegvidio
MMControl1.DeviceType = "Mpegvidio"
'设置时间格式为帧
MMControl1.TimeFormat = 3
'设置播放的文件为通用对话框中选择的文件
MMControl1.FileName = CommonDialog1.FileName
'打开文件
MMControl1.Command = "open "
Case 4 '选择*.mid
'设置多媒体设备类型为waveaudio
MMControl1.DeviceType = "waveaudio"
'设置时间格式为帧
MMControl1.TimeFormat = 3
'设置播放的文件为通用对话框中选择的文件
MMControl1.FileName = CommonDialog1.FileName
'打开文件
MMControl1.Command = "open "
End Select
'设置hwnddisplay的值,使媒体文件能够在picture控件中播放
MMControl1.hWndDisplay = Picture1.hWnd
End Sub
(二)新建、修改、删除目录
以上控件除了通用对话框(CommonDialog)之外一般只能显示当前的目录结构,对于在磁盘上新建、修改、删除目录却基本无能为力。
我们先来看看通用对话框对文件夹的新建,修改和删除操作.
1、新建目录
我们只要在显示出来的通用对话框的空白位置,单击鼠标,选择“新建”即可在指定的路径下创建新的目录,或者点击通用对话框右上角的新建图表(如下图所示),也可以在指定的路径下创建新的目录
2、修改文件夹名称
可以在显示出来的通用对话框中,用鼠标右键点击选择所要修改的文件夹,再弹出的快捷菜单中,选择重命名,即可修改目录名称。如下图所示:
3、删除文件夹
同修改文件夹名称一样,我们只要选择删除即可。如上图所示。
而且这种方法比RmDir更简便,它还可以删除包含有文件和子文件夹的文件夹。
除了以上控件,windows还给我们提供了一个叫做FileSystemObject(简称FSO)对象。FSO对象模型中包括了计算机文件系统所有的对象。见下表。利用这些对象可以更方便的操作文件系统。
对象功能
Drive允许收集系统的驱动器信息,诸如驱动器的可用空间
Folder允许创建、删除或移动文件夹,并向系统查询文件夹的名称、路径等等
Files允许创建、删除或移动文件,并向系统查询文件的名称、路径等等
FileSysterObject此为主要对象,提供一整套用于创建、删除、搜集相关信息,以及通常的操作驱动器,文件夹,和文件的方法。
TextStream允许读写文本文件
下面我们一起来看看怎样用FSO对象来显示、新建、修改以及删除目录。
FSO对象模型包含在Scripting的类型库中,此类型库存在于Scrrun.dll文件中.使用FSO对象模型,首先要建立一个FileSystemObject对象。有两种方法可以实现。一种是从”工程”菜单中的”引用”对话框选择”Microsoft Scripting Runtime”项,然后在代码窗口中声明一个FileSystemObject类型的变量.语句如下:
Dim fso As New FileSystemObject
另一种方法是在代码中使用CreatObject方法动态的创建一个FileSystemObject对象.语句如下:
Dim fso As Object ‘ 声明对象变量
Set fso = CreatObject(“Scripting. FileSystemObject”) ‘创建FSO对象
我们具体看看FileSystemObject的主要属性.
1、驱动器
(1) Drives属性是FileSystemObject对象的唯一属性,它返回Drives集合中所有可用驱动器的只读集合。对于可删除的驱动器,不需要将媒体插入其中,就可以在Drives集合中显示出来。下面是它的主要属性有两个:一个是Count,另一个是Item.Count属性返回Drives集合或Dictionary对象中的条目数.Item属性用来返回或设置Drives集合或Dictionary对象中与指定关键字相关的项目.
下面代码说明了如何获得Drives集合,以及如何用For Eacn……Next语句来访问该集合中的每个Drive:
Sub ShowDriveList()
Dim fs As Object, d, dc, s,n
创建文件系统对象
Set fs = CreatObject(“Scripting. FileSystemObject”)
创建驱动器集合
Set dc= fs.Drives
'取的驱动器对象
For Each d in dc
s = s & d.DriveLetter & “-” ‘格式化文本
If d.DriverType = Remote Then ‘如果是Remote类型的驱动器
n = d.ShareName ‘取得它的共享名
Else
n = d.volumeName ‘否则取得它的卷标
End if
s= s& n & vbCrLf ‘格式化文本
Next
MsgBox s ‘显示文本
End sub
(2) 当然我们也可以用Drive对象.Drive对象提供了对磁盘驱动器或网络共享属性的访问方法.下面是它的主要属性及其解释:
Availablespace驱动器已用空间DriveLetter驱动器指定的字母
Freespace驱动器剩余空间DriverType驱动器类型
TotalSize驱动器全部空间FileSystem驱动器文件系统
IsReady驱动器是否已准备Path驱动器根目录
SerizlNumber驱动器序列号VolumeName驱动器卷标
ShareName驱动器共享名
主要的方法就是GetDrive,此方法用来访问一个已有的驱动器,该方法返回一个与指定路径中的驱动器相对应的Drive对象。下面的代码中,我们将说明怎样取得一个指定的驱动器的相关信息:
Sub ShowFreeSpace(drvPath) ‘显示指定目录下的驱动器的信息
Dim fs As Object, d, s
Set fs = CreateObject("Scripting.FileSystemObject") ‘创建文件系统对象
Set d = fs.GetDrive(fs.GetDriveName(drvPath)) ‘创建并得到指定取目录下的驱动器
s = "Drive" & UCase(drvPath) & "-" ‘格式化文本
s = s & d.VolumeName & vbCrLf ‘得到驱动器的卷标
s = s & "FreeSpace:" & FormatNumber(d.FreeSpace / 1024, 0)
'计算驱动器的剩余磁盘空间
s = s & "Kbytes"
MsgBox s ‘显示
End Sub
下面是filesystemobject的其他方法
CreateFolder该方法的作用是创建一个文件夹。所要创建的文件夹必须是不存在的,否则出错。
CreateTextFile该方法的作用是产生一个指定的文件名,并返回一个TextStream对象,该对象可被用于对指定的文件进行读写。如果overwrite参数为False或未指定,对于一个已存在的文件,将产生错误。
DeleteFile该方法的作用是删除一个指定的文件。如果指定的文件不存在,则出错。
DeleteFolder该方法的作用是删除一个文件夹及其内容。如果没有发现匹配的文件夹则出错。该方法不能确定文件夹中是否包含内容。
DriveExists该方法的作用是用来确定驱动器是否存在。如果指定的驱动器存在,则返回True,否则返回False。但对于可删除介质的驱动器,即使没有介质存在,DriveExists方法也返回True,因此最好使用IsReady属性确定驱动器是否准备就绪。
FileExists该方法的作用是判断指定的文件对象是否存在于当前文件夹
FolderExists该方法的作用是判断指定的文件夹对象是否存在于当前文件夹
GetDrive该方法的作用是返回一个在指定路径中的与某个驱动器相对应的Drive对象。对于网络驱动器,将首先检查该共享是否存在。
GerDriveName该方法的作用是返回包括某一指定路径上的驱动器名的字符串。如果驱动器不能确定,则返回一个0长度字符串。该方法只对指定的路径起作用,它并不试图解析路径,也不检查指定路径是否存在。
GetExtensionName该方法的作用是返回指定路径中最后一个组成部分的扩展名。
GetFile该方法的作用是返回指定路径中与某一文件相关的File对象。一定要保证所指定的文件是实际存在的。否则将产生错误。
GetFileName该方法的作用是返回指定路径的最后一个组成部分的文件名。
GetFolder该方法的作用是返回指定路径上的与某个文件夹相关的Folder对象.要保证指定的文件夹是实际存在的,否则会出错. 使用Folder对象的第一部就是先用FileSystemObjectd的GetFolder方法得到Folder对象
GetParentFolderName该方法的作用是返回一个包含指定路径上的最后一个组成部分的父文件夹的名称。
MoveFile该方法的作用是将一个或多个文件从一个地方移动到另一个地方。
MoveFolder该方法的作用是移动一个或多个文件夹,如果源路径包含通配符,或目的路径以斜杠()为结束,则表明目的路径为已存在的路径,在此文件夹中移动相匹配的文件夹.否则,认为目的路径是一个要创建的目标文件夹的名字.如果目的路径为一个已存在的文件或目的路径为一个目录,则出错.如果没有任何文件与源路径中的通配符相匹配也出错.
OpenTextFile该方法可用来打开一个指定的文件,并返回一个TextStream对象。用于读文件或追加文件。
2、文件夹
对文件夹的操作,我们可以使用folder对象,它提供了对文件夹所有属性和方法的访问.下表市对其主要属性的解释:
DateCreated返回指定文件或文件夹的创建日期和时间
DateLastAccessed返回最后一次访问指定文件或文件夹的日期和时间
Drive返回指定文件或文件夹所在的驱动器符号
Files返回由File对象组成的所有Files集合,这些Files集合包含在指定的文件夹中,包括设置了隐藏和系统文件属性的那些文件夹
IsRootFolder如果指定的文件夹是根文件夹,则返回True,否则返回False
Name设置或返回指定文件或文件夹的名称
ParentFolder返回指定文件或文件夹的父文件夹的Folder对象
Path返回指定文件、文件夹或驱动器的路径
ShortName返回较早的需要8.3文件命名约定的程序所使用的短文件名
ShortPath返回较早的需要8.3文件命名约定的程序所使用的短路径
Size对文件来说,本属性返回以字节为单位的文件大小;对文件夹来说,返回以字节为单位包括其中所有文件或子文件夹的大小
SubFolders返回包含所有文件夹的一个Folders集合,这些文件夹包含在某个特定文件夹中, 包括设置了隐藏和系统文件属性的那些文件夹
Type返回指定文件或文件夹的类型信息.
使用Folder对象的第一部就是先用FileSystemObjectd的GetFolder方法得到Folder对象, 该方法的作用是返回指定路径上的与某个文件夹相关的Folder对象.要保证指定的文件夹是实际存在的,否则会出错.
让我们来看一看其中的各种属性及其用法吧.
(1)Attributes属性可以返回文件或文件夹的属性,或者设置他们的新属性.所设属性可以是以下值中任意一个或多个的逻辑组合.
常数值说明
Normal0为一般文件,不设置属性
ReadOnly1为只读文件,属性为读/写
Hidden2为隐藏文件,属性为读/写
System 4为系统文件,属性为读/写
Volume8为磁盘驱动器卷标,属性为只读
Directory16为文件夹或目录,属性为只读
Archive32在上次备份后已经改变的文件,属性为读/写
Alias64为链接或快捷方式,属性为只读
Compressed128为压缩文件,属性为只读
(2)DateCreated属性返回指定文件或文件夹的创建日期和时间,本属性为只读属性.
下面是用法:
Sub ShowFolderList( folderspec ) ‘folderspec 为文件夹名称
Dim fs , f, f1,fc , s
Set fs = CreateObject(“Scripting.FileSystemObject”)
Set f = fs.GetFolder(folderspec) ‘得到folderspec文件夹相关的folder对象
Set fc = f.SubFolders ‘得到folder对象所包含的文件夹的folder集合
For Each fi in fc ‘访问folder集合中的每一个folder
s= s & f1.name ‘格式化要显示的文本
s= s & vbCrLf
Next
MsgBox s ‘用对话框显示信息
End Sub
(3)DateLastModified属性用来返回最后一次修改指定文件或文件夹的日期和时间,本属性为只读.
下面代码用一个文件举例说明了DataLastModified属性的用法:
Sub ShowFileAccessInfo(filespec)
Dim fs,f,s
Set fs = CreateObject(“Scripting.FileSystemObject”)
Set f = fs.GetFolder(folderspec) ‘得到folderspec文件夹相关的folder对象
s= Ucase(filespec) & vbCrLf
s= s& “Created:” & f.DateCreate & vbCrLf
s= s & “Last Accessed :” & f.DateLastAccessed & vbCrLf
s= s & “Last Modifide :” & f.DateLastModified
MsgBox s, 0,”File Access Info”
End Sub
(4)Type属性返回关于某个文件或文件夹类型的信息.例如对于以.TXT结尾的文本文件来说,本属性会返回”Text Document”.下面的代码举例说明了返回某个文件夹类型的Type属性的用法.在这个示例中,试图将Recycle Bin的路径或其他唯一的文件夹提供给过程.
Sub ShowFileSize( filespec )
Dim fs,f,s
Set fs = CreateObject(“Scripting.FileSystemObject”)
Set f = fs.GetFolder(folderspec) ‘得到folderspec文件夹相关的folder对象
S = Ucase(f.Name) & “is a ” & f.Type ‘格式化文本
MsgBox s,o, “File Size Info ” ‘显示信息
End Sub
主要方法有:
(1)Copy方法:
该方法的作用是拷贝一个指定的文件或文件夹到指定的目录.该方法和FileSystemObject.CopyFile方法的作用相同
(2)CreateTextFile方法:
该方法的作用是产生一个指定的文件名,并返回一个TextStream对象,该对象可被用于对指定的文件进行读写.如果overwrite参数为False或未指定,对于一个已存在的文件,将产生错误.
(3)Delete方法:
该方法的作用是删除一个指定的文件或文件夹.如果指定的文件或文件夹不存在,则发生一个错误.对于一个File或Folder来说,Delete方法的运行的结果和执行FileSystemObject.DeleteFile或FileSystemObject.DeleteFolder的结果是一样的.Delete方法执行时与指定的文件夹中时候有内容无关.
(4)Move
该方法用来将一个指定的文件夹或文件从一个地方移动到另一个地方,如果只是想移动一个文件或文件夹,则使用Move方法和使用FileSystemObject.MoveFile或FileSystemObject.MoveFolder操作的结果是一样的,但是如果要同时移动多个文件或文件夹,则只能使用后者。
讲了这么多,还是让我们来看一下具体的实现方法:
1、 创建一个文件夹
可以使用FileSystemObject对象的CreateFolder方法来实现,但要创建的文件夹必须不存在,否则出错。特别注意,FileSystemObject对象不能创建或删除驱动器。
下面的例子可以在应用程序所在目录下创建一个文件夹
Sub CreateFolder(folderspec)
Dim fs
Set fs = CreatObject(“Scripting.FileSystemObject”)
fs.CreaterFolder(folderspec )
End sub
2、 删除一个或多个文件夹
可以使用FileSystemObject对象的Deletfolder方法,或者folder对象的Delete方法
Sub DeleteFolder(folderspec)
Dim fs
Set fs = CreatObject(“Scripting.FileSystemObject”)
fs.DeleteFolder(folderspec & “100”)
‘Set f = fs.GetFolder(folderspec) ‘得到folderspec文件夹相关的folder对象
‘f.Delete
End sub
3、移动一个或多个文件夹
可以使用FileSystemObject对象的Movefolder方法,或者folder对象的Move方法
Sub MoveFolder(folderspec)
Dim fs
Set fs = CreatObject(“Scripting.FileSystemObject”)
fs.MoveFolder(folderspec , “c:windows”)
‘Set f = fs.GetFolder(folderspec) ‘得到folderspec文件夹相关的folder对象
‘f.Move(“c:windows”)
End sub
4、一个或多个文件夹
可以使用FileSystemObject对象的Copyfolder方法,或者folder对象的Copy方法。
Sub CopyFolder(folderspec)
Dim fs
Set fs = CreatObject(“Scripting.FileSystemObject”)
fs.CopyFolder(folderspec , “c:windows”)
‘Set f = fs.GetFolder(folderspec) ‘得到folderspec文件夹相关的folder对象
‘f.Copy(“c:windows”)
End sub