11.1 类的创建与应用

41
11.1 类类类类类类类 11.2 类类 11.3 类类类 类类类类 类 11 类 类类类类类类类 类类

description

第 11 章 面向对象的编程. 11.1 类的创建与应用. 11.2 系统对象. 11.3 文件系统对象模型. 退出. 11.1 类的创建与应用. 11.1.1 类模块的基本概念. 11.1.2 类的创建过程. 11.1.3 对类的访问. 返回. 退出. 11.1.1 类模块的基本概念. 在面向对象的程序设计中,类是进行数据封装和数据隐藏的工具。 类是对象的归纳和抽象。 类与过程既有共同之处,也有着本质的区别。 在 VB6.0 中,类是 — 种通用代码,通过类模块建立。它是关于某个对象的外观(即属性)和性能(即方法)的描述。 - PowerPoint PPT Presentation

Transcript of 11.1 类的创建与应用

Page 1: 11.1  类的创建与应用

11.1 类的创建与应用

11.2 系统对象

11.3 文件系统对象模型

第 11 章 面向对象的编程

退出

Page 2: 11.1  类的创建与应用

11.1 类的创建与应用

11.1.1 类模块的基本概念

11.1.2 类的创建过程

返回 退出

11.1.3 对类的访问

Page 3: 11.1  类的创建与应用

11.1.1 类模块的基本概念在面向对象的程序设计中,类是进行数据封装和数据隐藏的工具。类是对象的归纳和抽象。类与过程既有共同之处,也有着本质的区别。在 VB6.0 中,类是—种通用代码,通过类模块建立。它是关于某个对象的外观(即属性)和性能(即方法)的描述。类模块与窗体十分类似,只是在运行期间类模块总是不可见的,而窗体是可见的,可以说类模块是一种没有可视界面的控件。每个类模块定义一个类,类模块中的 Sub 和 Function 函数过程是类的方法,类模块中的模块层变量和属性过程是类的属性。用类模块定义类的主要任务就是建立在运行期间由对象使用的属性和方法。面向对象程序设计的主要概念之一,就是把与特定对象有关的所有数据和过程集合在一起,这就是把所有对象的属性和方法定义在一个类模块中的原因。

Page 4: 11.1  类的创建与应用

11.1.2 类的创建过程

创建类的基本步骤为:

( 1 )插入一个类模块

( 2 )定义类的属性

( 3 )添加类的方法

( 4 )响应缺省事件和创建自定义事件

Page 5: 11.1  类的创建与应用

例 11-1:某单位根据销售人员的销售额决定奖金额。在数据文件“ c:\nemployee.dat”中存放着雇员编号、姓名、销售额和奖金。创建

“ ”一个应用程序,当单击窗体上的 销售情况查询 按钮时,要求用户在 InputBox框中输入姓名和密码来查询有关资料。参见图 11-1。下面结合这一实例,介绍类的创建过程和使用方法。

1.插入一个类模块“ 新建一个工程,单击 工程 | ” “ ”添加类模块 命令,在 添加类模块 对

“ ” “ ” “话框中的 新建 标签中选择 类模块 ,插入类模块,可以在 工程资” “ ”源管理器 中看到其图标,新类的缺省 名称 属性为 Class1,这里

将其改为 bonusClass,且保存到磁盘上时默认名为 bonusClass.Cls。

图 11-1 运行界面图 11-2 类的创建

Page 6: 11.1  类的创建与应用

2.定义类的属性( 1)使用公共变量使用公共变量定义类的属性应在类模块的声明部分进行,其格式为:Public 属性名 As 类型( 2)使用属性过程使用属性过程定义属性的步骤:( 1 “ )单击 工程 | ” “ ”添加过程 命令,打开 添加过程 对话框。( 2)在名称栏类输入过程的名称 employee,该名称将成为创建对象后的属性名。( 3 “ ” “ ”)选中 属性 单选按钮后,单击 确定 按钮,在代码窗口将显示该属性过程的框架,参见图 11-3。

图 11-3 “ ” 添加过程 对话框 图 11-4 类模块中属性过程框架

Page 7: 11.1  类的创建与应用

下面就是采用属性过程在该程序的类模块 bonusClass 中定义 lemployee 属性和 lpassword 属性:

Private memployee() As StringPrivate mpassword() As StringPublic Property Get lemployee() As String() lemployee = memployeeEnd PropertyPublic Property Let lemployee(arr() As String) memployee = arrEnd PropertyPublic Property Get password() As Variant lpassword = mpasswordEnd Property从上面的代码可知, lemployee 属性是可读写的, lpassword 属性是只读的。

这里,在类模块 bonusClass 的声明部分,将 memployee 和 mpassword 声明为字符数组变量(当然可以使用一般变量,如本例中如果不同的用户使用同一个密码,就可以将声明部分 lpassword() 后的 () 去掉),用于在属性过程之间传递数据,而对类模块之外的应用程序而言是不可见的,因而类模块中的数据具有隐蔽性。

Lemployee 属性是可读写的,因而可以在类模块外部改变其属性值,而在类模块之外对 lpassword 属性的改变是无效的。

Page 8: 11.1  类的创建与应用

3. 添加类的方法窗体和图片框具有 Print 方法,列表框和组合框具有 AddItem 方

法。同样,由类创建的对象也可以具有方法。为类添加的方法就是在类模块中添加公共过程。使用 Public Sub 子过程创建的方法没有返回值,而采用 Public Function 函数过程创建的方法可以有返回值。也可以在类模块中创建私有过程,但是只能在类模块内部调用,在外部是不可见的。

下面在 bonusClass 类模块中创建 displayemployee 方法,该方法用于显示雇员的编号、姓名、销售额和奖金数据。

Public Function displayemployee() As String Dim mdisplay As String RaiseEvent Salenum ' 激发 Salenum 事件 mdisplay = " 雇员号 :" & memployee(1) & vbCrLf mdisplay = mdisplay & " 姓名 :" & memployee(2) & vbCrLf mdisplay = mdisplay & " 销售额 :" & memployee(3) & vbCrLf mdisplay = mdisplay & " 奖金 :" & memployee(4) & vbCrLf If memployee(1) <> "" Then displayemployee = mdisplay Else MsgBox " 没有您的数据或密码错误! " End IfEnd Function

Page 9: 11.1  类的创建与应用

系统自身为创建类提供的事件为类的缺省事件,这类事件有两种,即 Initialize 事件和 Terminate 事件。此外,用户也可以在类模块中自定义事件。

( 1 ) 缺省事件在类模块代码窗口的“对象”框中选择“ Class” ,将自动创建 In

itialize 事件过程的框架,此时在“过程”框中选择“ Terminate” ,将创建 Terminate 事件过程的框架。

在本例中,可以为用户密码进行初始化设置以及初始化用户数据,其代码为:Private Sub Class_Initialize() ReDim mpassword(1 To 4) ReDim memployee(1 To 4) mpassword(1) = "111111" : mpassword(2) = "222222" mpassword(3) = "333333" : mpassword(4) = "444444" memployee(1) = "" : memployee(2) = "" memployee(3) = 0 : memployee(4) = 0End Sub一旦由创建类一个对象,程序将首先执行 Initialize 事件过程,为密码属性附值。

4. 类模块的缺省事件和自定义事件

Page 10: 11.1  类的创建与应用

11.1.3 对类的访问只有在程序中创建了类对象后,才能为类对象设置属性值,调用其方法和响应事件过程(即为类对象编写事件过程代码),这就是对类的访问。具体步骤包括声明类对象变量、创建类对象,使用类对象的属性、方法和响应事件过程,如有必要,还应释放对类对象的引用。由于类没有可视化的界面,因此访问类时,一般要借助窗体或窗体上的控件。1. 声明对象变量在创建类的对象时,应如同前面章节介绍的创建窗体类对象变量一样,应在创建前声明对象变量,其格式为:Dim 对象变量名 As 类名本例的对象声明为:Private [WithEvents] mybonus As bonusClass

Page 11: 11.1  类的创建与应用

2. 创建对象仅仅声明了一个对象变量后,并没有为对象变量指明具体的对象,因此对象变量的值为“ Noting” 。如执行Print TypeName(mybonus)

语句,将在窗体上显示 Noting 。可以使用 Set语句创建具体的对象,其格式为:Set 对象变量 =New 类名Set mybonus=New bonusClass一旦在内存中为对象指明了存储单元后,就可以使用多个对象变量指向同一个对象。如在上述创建对象的基础上,还声明了另一个对象变量:Private [WithEvents] youbonus As bonusClass

则下面的 Set语句Set youbonus= bonusClass

将对象变量 youbonus指向上次创建的同一个 bonusClass 对象。除了采用先声明对象,然后使用 Set语句创建对象的方法来创建对象外,还可以直接在声明对象时“隐式”地创建对象,其格式为:Dim 对象变量名 As New 类名

Page 12: 11.1  类的创建与应用

3. 使用对象创建了类对象后,就可以像使用标准控件一样使用类对象,只不

过类对象是不可见的。在本例中,响应自定义事件 Salenum 的代码为:Private Sub mybonus_Salenum() ' 响应 Salenum 事件过程 ReDim carr(1 To 4) As String Dim newname As String, newpassword As String * 6 newname$ = InputBox("请输入你的姓名 ") newpassword$ = InputBox("请输入你的密码 ") Open "c:\employee.txt" For Random As #1 Len = Len(nemployee) s = LOF(1) / Len(nemployee) For i = 1 To s Get #1, i, nemployee carr(1) = nemployee.enumber : carr(2) = nemployee.ename carr(3) = nemployee.esallnumber : carr(4) = nemployee.ebonus If Trim(nemployee.ename) = newname And newpassword = mybonus.lpassword(i) Then mybonus.lemployee = carr ' 为属性赋值 Exit For Else Erase mybonus.lemployee End If Next Close #1End Sub

Page 13: 11.1  类的创建与应用

' 在标准模块中建立自定义变量:Type mdemployee enumber As String * 10 epassword As String * 6 ename As String * 20 esallnumber As Long ebonus As CurrencyEnd TypeDim nemployee As mdemployee ' 在窗体声明部分声明窗体级变量Private WithEvents mybonus As bonusClass ' 在窗体声明部分声明类对象变量' 窗体加载事件代码:Private Sub Form_Load()Set mybonus = New bonusClass ' 创建类对象End Sub' 命令按钮单击事件代码:Private Sub Command1_Click() Print mybonus.displayemployee ' 调用类的方法End Sub

Page 14: 11.1  类的创建与应用

4.释放对象如果在程序中不再需要某个类对象变量,可以使用语句Set 类对象名 =Nothing来释放对象变量所占的内存空间。为进一步地理解类模块中各属性、方法和事件的内部运行机制及其相互关系,可以按 F8键,使用逐语句执行的方式运行应用程序。也可以按 F4键,打开对象浏览器窗口来查看类的各个成员。如图 11-5为本例中的 bonusclass类的成员,包括属性 lemployee、 lpassword,方法 displayemployee,缺省事件 Class_Initialize,自定义事件 Salenum和类内部使用的私有变量 memployee、 lpassword等。

图 11-5 对象浏览器窗口

Page 15: 11.1  类的创建与应用

11.2 系统对象11.2.1 App 对象

11.2.2 Clipboard 对象

11.2.3 Screen 对象

11.2.4 Printer 对象和 Printers 集合

11.2.5 其他系统对象

返回 退出

Page 16: 11.1  类的创建与应用

App 对象是通过关键字 App 访问的全局对象。它提供了十多个属性,包括应用程序的标题、版本信息、可执行文件和帮助文件的路径及名称以及是否运行前一个应用程序的示例。

属性 类型 说 明CompanyName 字符串 返回或设置包括运行中的应用程序的公司或创建者名称,运行时只读EXEName 字符串 返回当前正运行的可执行文件的根名(不带扩展名)。如果是在开发环

境下运行,则返回工程名HelpFile 字符串 确定 Microsoft Windows Help 文件的路径和文件名,应用程序使用这

个文件显示 Help 或联机文档Major,MinorRevision

数值 返回或设置应用程序的主要版本号、小版本号、订版本号,运行时只读

PrevInstance 逻辑 返回一个值,该值指示是否已经有前一个应用程序实例在运行。TaskVisible 逻辑 返回或设置一个值,用来确定应用程序是否出现在窗口任务列表中

表 11-1 App 对象的主要属性

11.2.1 App 对象

Page 17: 11.1  类的创建与应用

11.2.2 Clipboard 对象Clipboard 对象用于操作剪贴板上的文本和图形。它使用户能够复制、剪切和粘贴应用程序中的文本和图形。

方法 说 明Clear 用于清除系统剪贴板的内容SetData 图形数据 [, 格式 ]

GetData (格式)

按指定的图形格式将数据放到 Clipboard 对象中粘贴 Clipboard 对象中指定格式的数据

SetText 文字数据GetText ()

将选中的文字保存到 Clipboard 对象中粘贴 Clipboard 对象中的文本字符串

GetFormat

返回一个整数,指出 Clipboard 对象中的项目是否匹配期望的格式,常用的格式有:1—vbText 文字; 2—vbCFBitm .bmp 文件; 3—vbCFMetafile .wmg 文件

表 11-2 Clipboard 对象的常用方法

Page 18: 11.1  类的创建与应用

例 11-2:利用 Clipboard对象将图片框 Picture1中的图片粘贴到图片框 Picture2中,将 Clipboard对象中的文本粘贴到文本框 Text1中。 Private Sub Picture2_Click()

Clipboard.Clear Clipboard.SetData Picture1.Picture Picture2 = LoadPicture("") Picture2 = Clipboard.GetData() End Sub Private Sub Text1_Click() Text1 = Clipboard.GetText()End Sub

图 11-6 Clipboard对象应用实例

Page 19: 11.1  类的创建与应用

11.2.3 Screen 对象Screen 对象是指整个 Windows 桌面。 Screen 对象,可以访问当前窗体、控件以及其他与屏幕有关的信息,如修改屏幕鼠标指针。表 11-3为 Screen对象的常见属性。

属 性 说 明ActiveControl 返回拥有焦点的控件ActiveForm 返回活动窗口的窗体FontCount 回或设置当前显示设备或活动打印机可用的字体数Fonts 返回当前显示器或活动打印机可用的所有字体名Height 、 Width 返回屏幕的高度和宽度;在设计时无效,在运行时为只读MouseIcon 返回或设置自定义的鼠标图标MousePointer 返回或设置鼠标指针的类型

表 11-3 Screen 对象的常见属性

Page 20: 11.1  类的创建与应用

例 11-3:在窗体上依次添加两个图片框 Picture1和 Picture2和一个时钟 Timer1控件(将其 Interval属性设置为 1000),编写如下代码:

Private Sub Timer1_Timer() Static screenfontscount As Integer If screenfontscount < Screen.FontCount Then Screen.ActiveControl.Cls Screen.ActiveControl.Print Screen.Fonts(screenfontscount) If Trim(Screen.Fonts(screenfontscount)) = "Arial" Then Timer1.Enabled = False MsgBox " 这就是我想要的字体 " Exit Sub End If screenfontscount = screenfontscount + 1 End IfEnd Sub

Page 21: 11.1  类的创建与应用

11.2.4 Printer 对象和 Printers 集合使用 Printer 对象可以实现与系统打印机的通讯(最初是缺省系统打印机)。使用 Printers 集合可获取有关系统上所有可用打印机的信息, Count 属性表示 Printers 集合中的元素个数。Printer 对象的常用属性有 Height 、 Width 、 PaperSize 、 DeviceName 、 FontName 和 FontSize等,分别代表打印纸的长度、宽度、纸张大小、打印机的名称、打印字体名称和字体尺寸。Printer 对象重要的方法有: EndDoc 方法(开始打印)、 KillDoc方法(中断打印)和 NewPage 方法(换页)。

Page 22: 11.1  类的创建与应用

例 11-4 :将“关于软件设计大赛的通知”文本打印 10份,并在页前面加上页码。

Private Sub Command1_Click() Dim npage As Integer, str As String Printer.FontName = "宋体 ": Printer.FontSize = 20 For npage = 1 To 10 str = " 第 " & Printer.Page & "页 " & vbCrLf & " 关于软件设计大赛的通知 " '

打印内容 Print str Printer.Print str Printer.NewPage ' 换页 Next Printer.EndDoc ' 将打印内容送到打印缓冲区,如果设备就绪,则开始打印End Sub

例 11-5 :在系统所有的打印机中查找第一个将页码方向设置为纵向的打印机,然后将其设置为缺省打印机。

Dim X As Printer For Each X In Printers If X.Orientation = vbPRORPortrait Then Set Printer = X ' 设定为系统缺省打印机。 Exit For End IfNext

Page 23: 11.1  类的创建与应用

11.2.5 其他系统对象1.Control 对象与 Control 集合对象Control 对象为所有 Visual Basic 内部控件的类名。可以将一

个变量标为 Control 对象,然后象把控件放到窗体上一样来引用它。下面是使用 Control 对象的实例:

Private Sub Command3_Click() Dim c As Control For Each c In Form1.Controls Print c.Name Next Set c = Command1 Print c.NameEnd Sub

程序运行时,首先打印窗体上所有控件的名称,然后在打印变量 c 的名称(即 Command1 )。

Control 集合对象包含窗体上所有控件。

Page 24: 11.1  类的创建与应用

2.Form1 对象Form 对象是窗口、或者对话框。 Forms 集合是一个集合,它

的元素代表每一个在应用程序中加载的窗体。集合包括应用程序的 MDI 窗体 ,MDI 子窗体和非 MDI 窗体。 Forms 集合只有一个属性 Count ,指定集合中元素的数目。下面的实例的作用是,当 Form1成为活动窗体时,在窗体上名为 lstAllForms 的列表框中显示所有已经加载的窗体和对话框的标题。

Private Sub Form_Activate() Dim I ' Declare variable. ' 重新填充列表 ( 当添加或删除一个实例时 ) 。 lstAllForms.Clear ' Clear list box. For I = 0 To Forms.Count - 1 lstAllForms.AddItem Forms(I).Caption Next IEnd Sub

Page 25: 11.1  类的创建与应用

3.Err 对象Err 对象含有关于运行时错误的信息。 Err 对象是具有全局范围的固有对象。在代码中没有必要建立这些对象的实例。Err 对象的缺省属性是 Number 。当运行时错误发生时, Err 对象的属性被填入明确识别错误的信息以及处理这个错误所使用的信息。Err 对象有两个方法, Raise 方法用于在代码中生成运行时错误。Clear 方法用于清除 Err 对象的所有属性设置。在任意形式的 Resume 或 On Error 语句之后以及在错误处理子程序内的 Exit Sub 、 Exit Function 、或 Exit Property 语句之后,可使用 Clear 方法将 Err 对象的属性重新设置为零或长度为零的字符串 ("") 。

Page 26: 11.1  类的创建与应用

图 11-7 应用 Err对象实例

例 11-6 :下面的程序使用 Err 对象的各个属性建立一个显示错误信息的对话框(参见图 11-7)。

Private Sub Command1_Click() Dim Msg On Error Resume Next ' 改变错误处理的方式 Err.Clear m = 10 / 0 ' 生成一个“除数为零”错误。 If Err.Number <> 0 Then ' 检查错误代号 Msg = Err.Source & "产生 " & Str(Err.Number) & " 号错误 ," & " 错误原因: " & C

hr(13)_ & Err.Description MsgBox Msg, , " 错误 ", Err.HelpFile, Err.HelpContext ' 显示错误信息 End IfEnd Sub

Page 27: 11.1  类的创建与应用

11.3 文件系统对象模型11.3.1Scripting 类型库

11.3.2 FileSystemObject 对象

11.3.3 Drive 对象

11.3.4 Folder 对象

11.3.5 File 对象

11.3.6 TextStream 对象

退出返回

Page 28: 11.1  类的创建与应用

11.3.1Scripting 类型库FSO包含在 Scripting 类型库中,如果要在工程中使用 FSO,就必须添加对 Scripting “ 类型库的引用。单击 工程 | ”引用 命令,打开“ ” “引用 对话框,选中 Microsoft Scripting Runtime”复选框,即可将FSO对象模型引入到系统中。 FSO 对象模型包括表 11-4所示 5个对象。按 F2 “ ”键打开 对象浏览器 ,在 Scripting 类型库中了解 FSO 对象模型中各种对象、集合、属性、方法、事件以及它的常数的信息。参见图 11-8。

对象 描述Drive 读取关于系统所用的驱动器的信息Folder 允许创建、删除或移动文件夹,并向系统查询文件夹的名称、路径等Files 允许创建、删除或移动文件,并向系统查询文件的名称、路径等FileSystemObject

该组的主要对象,提供一整套用于创建、删除、收集相关信息、以及通常的操作驱动器、文件夹和文件的方法。与本对象相关联的很多方法复制了其它对象中的方法。

TextStream 允许读写文本文件。

表 11-4 FSO 对象模型中的对象

Page 29: 11.1  类的创建与应用

FSO 对象模型编程的基本过程为:( 1)使用 CreateObject 方法,或将一个变量声明为 FileSystemObject 对象类型来创建一个 FileSystemObject 对象。( 2)对新创建的对象使用适当的方法。( 3 )访问该对象的属性。

图 11-8 了解 FSO 对象的有关信息

Page 30: 11.1  类的创建与应用

11.3.2 FileSystemObject 对象1. 创建 FileSystemObject 对象可以通过如下两种方法创建一个 FileSystemObject 对象: ( 1 )使用 New 关键字将一个变量声明为 FileSystemObject 对象类型 Dim Myfso As New FileSystemObject( 2 )使用 CreateObject 方法来创建一个 FileSystemObject 对象 Dim Myfso As ObjectSet Myfso = CreateObject("Scripting.FileSystemObject")

2.FileSystemObject 对象的属性FileSystemObject 对象只有一个属性,即 Drive 属性,用来返回

包含本地机器上所有可用 Drive 对象的 Drives 集合。下述代码可在立即窗口显示系统中可用驱动器的名称。

Private Sub ShowDriveList() Dim myfso, mydc, d, str Set myfso = CreateObject("Scripting.FileSystemObject") Set mydc = myfso.Drives For Each d In mydc str = str & d.DriveLetter & " - " Next Debug.Print strEnd Sub

Page 31: 11.1  类的创建与应用

表 11-5 .FileSystemObject 对象的方法

方 法 说 明CopyFile 源文件 ,目标文件 [, 是否覆盖源文件 ] 复制文件CopyFolder源文件夹 ,目标文件夹 [, 是否覆盖源文件夹 ] 复制文件夹CreateFolder( 文件夹 ) 创建文件夹CreateTextFile( 文件 [, 是否覆盖 ]) 创建文本文件DeleteFile 文件 [, 是否删除只读属性 ]

DeleteFolder 文件夹 [, 是否删除只读属性 ]

删除一个指定的文件删除一个指定的文件夹和它的内容

DriveExists(磁盘 ) 指定驱动器是否存在FileExists( 文件路径 ) 指定文件是否存在FolderExists( 文件夹 ) 指定文件夹是否存在GetDrive(磁盘 ) 返回代表指定磁盘的 Drive 对象GetFolder( 文件夹路径 ) 返回代表指定文件夹的 Folder 对象GetFile( 文件路径 ) 返回代表指定文件的 File 对象GetSpecialFolder(folderspec) 返回指定的特殊文件夹。GetTempName 返回随机产生的临时文件或文件夹的名字MoveFile源文件 ,目标文件 移动文件MoveFolder 源文件夹 ,目标文件夹 移动文件夹

3.FileSystemObject 对象的方法

Page 32: 11.1  类的创建与应用

Drive 对象用于对特定磁盘驱动器或网络共享的属性提供访问。要使用 Drive对象,应首先声明一个驱动器类型变量,然后使用 .FileSystemObject对象的 GetDrive方法来返回一个 Drive对象,例如:Dim Mydrv As DriveSet Mydrv =Myfso.GetDrive("C")

属 性 作 用

AvailableSpace 返回在指定的驱动器或网络共享上的用户可用空间容量

DriveLetter 返回某个物理本地驱动器或网络共享的驱动器字母,只读

DriveType 返回一个值,表示指定驱动器的类型。 0—Unknown;1—Removable;2—Fixed;3—Remote;4—CDROM;5—RAMDisk

FileSystem 返回指定驱动器所使用的文件系统类型( FAT 、 FAT32 、 NTFFS )

FreeSpace 返回指定驱动器上或网络共享的用户可用磁盘剩余空间容量,只读

IsReady 如果指定的驱动器已准备好,返回 True;否则返回 False

Path 返回指定文件、文件夹、或驱动器的路径

RootFolder 返回一个 Folder 对象,该对象表示一个指定驱动器的根文件夹,只读属

SerialNumber 返回用于唯一标识磁盘卷标的十进制序列号

ShareName 返回指定驱动器的网络共享名

TotalSize 以字节为单位,返回驱动器或网络共享的总空间大小

VolumeName 设置或返回指定驱动器的卷标名

表 11-6 Drive 对象的常用属性

11.3.3 Drive 对象

Page 33: 11.1  类的创建与应用

例 11-7:下列示例说明了如何使用 ListView列表视图控件和 Drive 对象来收集有关驱动器的信息。

Private Sub Command1_Click() Dim Myfso As New FileSystemObject, Mydrv As Drive, s As String For Each Mydrv In Myfso.Drives With ListView1.ListItems.Add(, ,Mydrv.DriveLetter & ":") .SubItems(1) = Choose(Mydrv.DriveType, "软盘 ", "硬盘 ", "硬盘 ", "光盘 ") .SubItems(2) = Mydrv.TotalSize / 1024 .SubItems(3) = Mydrv.FreeSpace / 1024 End With NextEnd Sub

图 11-9 显示驱动器信息

Page 34: 11.1  类的创建与应用

11.3.4 Folder 对象Folder对象提供对一个文件夹所有属性的访问。要使用 Folder对象,应首先声明一个文件夹类型的变量,然后用 FileSystemObject对象的 GetFolder方法来返回一个 Folder对象,如:Dim Myfld As FolderSet Myfld = Myfso.GetFolder("C:\Myfolder")

属 性 说 明DateCreated 返回指定文件或文件夹的创建日期和时间,只读DateLastAccessed 返回最后一次访问指定文件或文件夹的日期和时间,只读DateLastModified 返回最后一次修改指定文件或文件夹的日期和时间,只读Drive 返回指定文件或文件夹所在的驱动器符号,只读Files 返回文件夹中所有文件的集合IsRootFolder 指定的文件夹是否为根文件夹Name 设置或返回指定文件或文件夹名,读 / 写属性ParentFolder 返回指定文件或文件夹的父文件夹对象,只读Path 返回指定文件、文件夹、或驱动器的路径Size 返回以字节为单位的包含在文件夹中所有文件和子文件夹的大小SubFolders 返回文件夹中所有子文件夹的集合

表 11-7 Folder 对象的常用属性

Page 35: 11.1  类的创建与应用

11.3.5 File 对象File对象提供对文件所有属性的访问。要使用 File对象,应首先声明一个文件夹类型的变量,然后用 FileSystemObject对象的 GetFile方法来返回一个 File对象,如:Dim Myfile As FileSet Myfile = Myfso.GetFile ("C:\Myfolder\file1.txt")

属 性 说 明Attributes 设置或者返回文件或文件夹的属性: 0—Normal;1—Readonly;2—Hidden;4—Sy

stem;32—Archive等DateCreated 返回指定文件的创建日期和时间,只读DateLastAccessed 返回最后一次访问指定文件的日期和时间,只读DateLastModified 返回最后一次修改指定文件的日期和时间,只读Drive 返回指定文件所在的驱动器符号,只读Name 设置或返回指定文件或文件夹名,读 / 写属性ParentFolder 返回指定文件的父文件夹对象,只读Path 返回指定文件的路径Size 返回以字节为单位的文件大小Type 返回关于某个文件或文件夹类型的信息。例如,对于以 .TXT 结尾的文件来说,

返回 "Text Document" 。

表 11-8 File 对象的常用属性

Page 36: 11.1  类的创建与应用

File 对象的方法有 Copy 、 Delete 、 Move等。对一个 File 或 Folder , Copy 方法的结果和执行 FileSystemObject.CopyFile 或FileSystemObject.CopyFolder 操作的结果是一样的,在后者中, 对象所引用的文件或文件夹是作为参数传递的。应当注意,后面的方法能够复制多个文件或文件夹。

Private Sub Command1_Click() Dim Myfso As New FileSystemObject , Mydrv As Drive , Myfile As File Set Mydrv = Myfso.getdrive("A:") Set Myfile = Myfso.GetFile("C:\My Documents\employee.txt") If Not Mydrv.isready Then MsgBox " 请在 A驱插入软盘 " Exit Sub End If If Mydrv.FreeSpace < Myfile.Size Then MsgBox " 软盘剩余空间不够 ,请更换软盘 " Exit Sub End If If Not Myfso.folderexists("A:\temp") Then Myfso.createfolder ("A:\temp") Myfile.Copy "A:\temp\tmfile.txt" End IfEnd Sub

Page 37: 11.1  类的创建与应用

1. TextStream 对象的声明、创建及其属性和方法TextStream 对象用于读写顺序文件。 FSO 对象模型尚不支持创建随机文件或二进制文件。要创建随机文件和二进制文件,请参考“文件”一章。声明 TextStream 对象的语句为:Dim Myts As TextStream然后,可以如下两种方法打开和创建 TextStream 对象:( 1 )使用 FileSystemObject 对象创建和打开 TextStream 对象Set Myts = Myfso.CreateTextFile("c:\testfile.txt", ForReading,True)这里,要打开的文件为 "c:\testfile.txt" ,参数 ForReading 表示从文件读出信息( Forwriting则为向文件写入信息, ForAppending 表示向追加信息), True 表示如果文件 "c:\testfile.txt" 不存在,则创建一个新的文件。( 2 )使用 File 对象创建和打开 TextStream 对象Set Myfile = Myfso.CetFile("c:\testfile.txt")Set Myts = Myfile.OpenAsStream(ForReading)

11.3.6 TextStream 对象

Page 38: 11.1  类的创建与应用

• 表 11-9 TextStream 对象的常用属性属 性 说 明

AtEndOfLine只读属性,在 TextStream 文件中,如果文件指针正好在行尾标记的前面,那么该属性值返回 True ;否则返回 False

AtEndOfStream只读属性,如果文件指针在 TextStream 文件末尾,则该属性值返回 True ;否则返回 False

Column 只读属性,返回 TextStream 文件中当前字符位置的列号Line 只读属性,返回一个 TextStream 文件中的当前行号

• 表 11-10 TextStream 对象的常用方法

方 法 说 明Read(n) 从一个 TextStream 文件中读取指定数量的字符并返回得到的字符串ReadAll 读取整个的 TextStream 文件并返回得到的字符串ReadLine 从一个 TextStream 文件读取一整行(不包括换行符)并返回得到的字符串Skip(n) 当读一个 TextStream 文件时跳过指定数量的字符SkipLine 当读一个 TextStream 文件时跳过下一行Write( 字符串 ) 写一个指定的字符串到一个 TextStream 文件WriteBlankLines 写入指定数量的换行符到一个 TextStream 文件中WriteLine (字符串) 写入一个指定的字符串和换行符到一个 TextStream 文件中

Close 关闭一个打开的 TextStream 文件

Page 39: 11.1  类的创建与应用

2. 用 FSO 创建文件、添加以及读取数据( 1 )用 FSO 创建文件有三种不同方法来创建一个顺序文本文件( TextStream 文件)。1 ) 使用 CreateTextFile 方法Dim Myfso As New FileSystemObject, Myfil As FileSet Myfil = Myfso.CreateTextFile("c:\Mytestfile.txt",True)这样,就在 C盘的根目录下创建了一个空的、名为 Mytestfile.txt 的TextStream 文件。2 )使用 OpenTextFile 方法Dim Myfso As New FileSystemObject, Myts As New TextStreamSet Myts = Myfso.OpenTextFile("c:\ Mytestfile.txt", ForWriting)3 )使用 OpenAsTextStream 方法:Dim Myfso As New FileSystemObject, Myfil As File, Myts As TextStreamSet Myfso = CreateObject("Scripting.FileSystemObject")Myfso.CreateTextFile ("Mytestfile.txt")Set Myfil = Myfso.GetFile("Mytestfile.txt")Set Myts = Myfil.OpenAsTextStream(ForWriting)

Page 40: 11.1  类的创建与应用

( 2 )添加数据文本文件一经创建,就可以分三步向其中加入数据。 第一步:打开文本文件以备写入数据。第二步:写入数据。第三步:关闭文件。 要打开文件,可以使用下面两种方法中的任一种: File 对象的 OpenAsTextStream 方法,或 FileSystemObject 对象的 OpenTextFile 方法。要向打开的文本文件中写入数据,可以使用 TextStream 对象的 Write 或 WriteLine 方法。它们之间的唯一差别是 WriteLine 在指定的字符串末尾添加换行符。 WriteBlankLines 方法为向文本文件中添加一个空行。 要关闭一个已打开的文件,应使用 TextStream 对象的 Close 方法。

Page 41: 11.1  类的创建与应用

( 3 )读取数据可以使用 TextStream 对象的 Read 、 ReadLine 或 ReadAll

方法,从一个文本文件中读取数据。如果使用 Read 或 ReadLine 方法并且想要跳过数据的某些部

分,可以使用 Skip 或 SkipLine 方法。例 11-8 :创建一个新的 TextStream 文件,分别使用 Write 、 WriteLine 和 WriteBlank

Lines 方法向其中添加数据,然后读出文件中的数据,并使用 MsgBox 对话框显示数据。Private Sub Command1_Click() ' 创建一个新的 TextStream 文件并添加数据Dim Myfso, Mytxtfile Set Myfso = CreateObject("Scripting.FileSystemObject") Set Mytxtfile = Myfso.CreateTextFile("c:\Mytestfile.txt", True) Mytxtfile.Write (" 为 TextStream 文件添加新的数据 " + vbNewLine) ' 写入新的数据 Mytxtfile.WriteLine (" 添加一行数据 ") ' 写入一行带有换行符的文本 Mytxtfile.WriteBlankLines (2) ' 向文件中写入两个换行符 Mytxtfile.Close ' 关闭 TextStream 文件 MytxtfileEnd Sub Private Sub Command2_Click() ' 读取 TextStream 文件中的数据 Dim Myfso As New FileSystemObject, Mytxtfile, Myfil1 As File, Myts As TextStream Set Myfil1 = Myfso.GetFile("c:\Mytestfile.txt") Set Myts = Myfil1.OpenAsTextStream(ForReading) ' 读取文件的内容 str = Myts.ReadAll MsgBox str Myts.CloseEnd Sub