什么是Scripting Runtime Library?按照一般的说法,Scripting Runtime Library(以下简称SR)提供了微软“忘记”放到Visual Basic中的基本的文件系统操作函数何对象。点击菜单的 Project | Referrences 项,在References选择窗口的References列表中选择 Microsoft Scripting Runtime项。然后单击 “确定”键选择退出就可以将Scripting Runtime Library加入到VB工程文件中。(在下面的程序中在添加代码之前都要执行这一步操作,凡是在下面提到加入SR库,都是指这一步)一个SR对象包括FileSystemObject对象和Directionary对象,分别对应文件系统操作和字典操作。
例如 Dim fsoSys As New Scripting.FileSystemObject 就定义了一个FileSystemObject对象FileSystemObject对象包含获取驱动器信息的Drive对象;对文件进行复制、删除、移动等操作的File对象;对文件夹进行建立、复制、删除、移动和获取文件夹下的文件和子文件夹的Folder对象;建立、读取、写入文本文件的TextStream对象。下面对这些对象的属性和操作方法进行分门别类的介绍
一、对于驱动器Drive对象的操作
通过一个Drive对象可以获得该对象定义的驱动器的容量、属性等信息,使用FileSystemObject对象的GetDrive方法可以得到一个Drive对象。下面是一个Drive对象操作的范例。
首先在VB中建立一个新的工程。加入SR库。然后在Form1中加入一个ListBox控件、一个PictureBox不要改变它们的属性,然后在Form1的代码窗口中加入以下代码:

Option Explicit

Dim fsoSystem As New FileSystemObject
Dim fsoDrives As Drives
Dim fsoDrive As Drive

Private Sub Form_Load()

Dim sDrive As String

Dim sDriveType As String

Dim bHasCDRom As Boolean

Set fsoDrives = fsoSystem.Drives

For Each fsoDrive In fsoDrives

sDrive = fsoDrive.DriveLetter & ": "

Select Case fsoDrive.DriveType

Case 0: sDriveType = "未知类型驱动器"

Case 1: sDriveType = "可移动驱动器"

Case 2: sDriveType = "固定驱动器"

Case 3: sDriveType = "远程驱动器"

Case 4: sDriveType = "CDROM驱动器"

Case 5: sDriveType = "RAM Disk"
End Select

If fsoDrive.DriveType = CDRom Or fsoDrive.DriveType = CDRom Then
bHasCDRom = bHasCDRom Or fsoDrive.IsReady
End If

sDrive = sDrive & sDriveType
List1.AddItem (sDrive)
Next

End Sub

Private Sub Form_Unload(Cancel As Integer)
Set fsoSystem = Nothing
End Sub

Private Sub List1_Click()

Dim astr$

Dim fsoDrive As Drive

If List1.ListIndex > -1 Then
astr = Left$(List1.List(List1.ListIndex), 1)
Set fsoDrive = fsoSystem.GetDrive(astr)

'检查驱动器是否准备好
If Not fsoDrive.IsReady Then
MsgBox ("该驱动器未准备好或未插入磁盘")

Exit Sub

End If

'输出驱动器信息
With Picture1
.Cls
.CurrentX = 30: .CurrentY = 30
Picture1.Print "总容量" + Format$(fsoDrive.TotalSize, "###,###,###,###,###,##0") + " 字节"
Picture1.Print "可用容量" + Format$(fsoDrive.AvailableSpace, "###,###,###,###,###,##0") + " 字节"
Picture1.Print fsoDrive.DriveLetter & ": 使用的文件系统为: " & fsoDrive.FileSystem
End With

Set fsoDrive = Nothing
End If

End Sub

运行程序,程序检测系统中所有的可用驱动器。然后将它们在List1上列出来,点击List1上的驱动器列表项,该驱动器的基本信息就会显示在Picture1上,如果该驱动器未准备好(例如未插入磁盘或光盘),程序就会出现提示。利用该方法可以检测软驱或者CD-ROM驱动器中是否有盘以及实现向超级解霸中的CD自动检测功能。需要注意的一点是:上面的程序在检测磁盘容量时只支持2GB的容量,也就是说如果你的分区大于2G的话,检测出来的容量也不会超过2GB。

二、对于文件夹Folder对象的操作
通过FileSystemObject的GetFolder方法可以获得一个Folder对象。

下面的范例介绍了如何建立一个Folder对象和利用该对象建立、删除文件夹和获取子文件夹的操作。首先建立一个工程文件,在其中加入SR库。在Form1中加入一个TreeView控件,两个CommandButton控件,然后在Form1中加入以下代码:

Dim fsoSys As New Scripting.FileSystemObject
Dim fsoRootFolder As Folder

Private Sub Form_Load()

Dim fsoSubFolder As Folder

Dim nodRootNode As Node

Dim nodChild As Node

Dim astr$

Set nodRootNode = TreeView1.Nodes.Add(, , "Root", "c:")
Set fsoRootFolder = fsoSys.GetFolder("c:")

For Each fsoSubFolder In fsoRootFolder.SubFolders

astr = fsoSubFolder.Path
Set nodChild = TreeView1.Nodes.Add("Root", tvwChild, astr, fsoSubFolder.Name)
Next

Set fsoRootFolder = Nothing
Command1.Caption = "建立目录"
Command2.Caption = "删除目录"
End Sub

Private Sub Form_Unload(Cancel As Integer)
Set fsoSys = Nothing
End Sub

Private Sub Command1_Click()

Dim fsoFolder As Folder

'检查目录是否存在,如果目录不存在则建立新目录
If fsoSys.FolderExists("c:emp") Then
MsgBox ("目录c:emp已经存在,无法建立目录")
Else
Set fsoFolder = fsoSys.CreateFolder("c:emp")
Set fsoFolder = Nothing
End If

End Sub

Private Sub Command2_Click() '检查目录是否存在,如存在则删除目录

If fsoSys.FolderExists("c:emp") Then
fsoSys.DeleteFolder ("c:emp")
Else
MsgBox ("目录c:emp不存在")
End If

End Sub

运行程序,程序建立一个指向C盘根目录的Folder对象并获取它的所有子文件夹加入到TreeView中,双击TreeView1中的 "c:" 就可以打开分支查看c:目录下的所有子目录名。点击Command1就可以建立 c:emp目录,如果目录已存在程序会给出提示;点击Command2删除c:emp目录。

三、对于文件File对象的操作
通过FileSystemObject的GetFile方法可以建立一个指向磁盘上一个文件的File对象。下面的范例介绍了如何利用File对象获得文件的基本信息。首先建立一个新的工程文件,加入SR库,在Form1中加入一个FileListBox控件和一个PictureBox控件,不要使
二者重叠,然后在Form1中加入以下代码:

Option Explicit

Dim fsoSys As New Scripting.FileSystemObject

Private Sub File1_Click()
Dim fsoFile As File
Dim astr$
Dim sDateCreate

On Error GoTo errfun
'获得File1中的文件名并据此建立一个File对象
Set fsoFile = fsoSys.GetFile("c:windows" + File1.List(File1.ListIndex))

Picture1.Cls
Picture1.CurrentY = 10
Picture1.Print "文件名 " + fsoFile.Name
Picture1.Print "Dos文件名 " + fsoFile.ShortName
Picture1.Print "文件类型 " + fsoFile.Type
Picture1.Print "文件大小 " & Str$(fsoFile.Size)
sDateCreate = fsoFile.DateCreated
Picture1.Print "创建时间 " & sDateCreate
Picture1.Print "修改时间 " & fsoFile.DateLastModified
Picture1.Print "访问时间 " & fsoFile.DateLastAccessed
If fsoFile.Attributes And Archive Then
astr = astr + "常规 "
End If
If fsoFile.Attributes And ReadOnly Then
astr = astr + "只读 "
End If
If fsoFile.Attributes And Hidden Then
astr = astr + "隐藏 "
End If
If fsoFile.Attributes And System Then
astr = astr + "系统 "
End If
If fsoFile.Attributes And Compressed Then
astr = astr + "压缩 "
End If

Picture1.Print "文件类型 " + astr

Set fsoFile = Nothing
Exit Sub
errfun:
'如果文件创建时间为未知就会导致错误,这里是错误处理程序段
sDateCreate = "(未知)"
Resume Next
End Sub

Private Sub Form_Load()
File1.Path = "c:windows"
End Sub

Private Sub Form_Unload(Cancel As Integer)
Set fsoSys = Nothing
End Sub

四、对于TextStream对象的操作
对于通过VB编程对文本文件进行IO操作,一直是一个头疼的问题。如果使用Inout$函数一次把打开的文件内容全部读取到一个字符串中的话,对于某一行的字符串操作就会十分不方便,同时还会有一个字符串不能大于65K而导致无法读取大文件的问题。而采用Line Input的方法又丧失了对文件整体操作的方便性。而TextStream对象提供了一种基于流的文件操作方式,使得对文本文件的操作方便了很多。
利用FileSystemObject的CreateTextFile方法或者OpenAsTextStream 方法可以建立一个TextStream对象,该对象包含了文件中的所有内容,可以通过只读、只写和追加方式打开文件。当建立了TextStream对象只后,用户就可以直接对TextStream进行操作,从而增加了对文件操作的方便性和安全性。
下面是一个TextStream对象操作的范例。
首先建立一个新的工程文件,加入RS库,在Form1中加入三个CommandButon控件和一个TextBox控件,在C:下建立一个help.txt的文件,然后在Form1中加入以下代码:

Option Explicit

Dim fsoFile As New FileSystemObject
Dim fsoTextStream As TextStream

Private Sub Command1_Click()
If Dir$("c:help.txt") = "" Then
MsgBox ("c:help.txt文件不存在,程序将退出")
Set fsoFile = Nothing
End
End If
'打开文件
Set fsoTextStream = fsoFile.OpenTextFile("c:help.txt", ForReading)
Text1.Text = fsoTextStream.ReadAll '将文件读取到Text1中
End Sub

Private Sub Command2_Click()
Dim fsoTextTemp As TextStream

'关闭原来的文件,并建立一个同名的新的文件,将更新的文件流写入到新文件中
fsoTextStream.Close
Set fsoTextStream = Nothing
Set fsoTextTemp = fsoFile.CreateTextFile("c:help.txt", True)
fsoTextTemp.Write Text1.Text
fsoTextTemp.Close
Set fsoTextTemp = Nothing

Command1_Click
Command2.Enabled = False
End Sub

Private Sub Command3_Click()
fsoTextStream.Close
Set fsoTextStream = Nothing
Set fsoFile = Nothing
End
End Sub

Private Sub Form_Load()
Text1.Text = ""
Command1.Caption = "打开文件"
Command2.Caption = "保存文件"
Command3.Caption = "退出"
Command2.Enabled = False
End Sub

Private Sub Text1_Change()
Command2.Enabled = True
End Sub

运行程序,点击Command1就可以打开c:help.txt文件,按Command2保存文件,按Command3退出。

接下来要介绍的是Scripting Runtime Library一个不起眼但是比较有用的对象—Dictionary对象

如果在VB中要实现象字典一样一一对应的列表并实现查询,例如实现学生学号同学生姓名一一对应,输入学号就可以得到学生姓名这样的程序。你会使用什么什么方法呢?一般的方法是建立两个列表,分别在两个列表中输入学生姓名和学号,在查询时首先查询学号列表中相符合的学号,然后在学生姓名列表中调出相应的学生姓名。但是这样做编程的量增大,而且不便于维护。还有的读者可能想到了使用数据库,但是这样做显得有一些“杀鸡用牛刀”,而且调用数据库对于程序的尺寸和运行速度有很大影响。这里我要象大家介绍的是利用Scripting Runtime Library中的Dictionary对象实现字典功能。
下面首先通过程序来介绍Dictionary对象的使用首先建立一个新的工程文件,在Form1中加入一个ListBox控件,一个TextBox控件,然后在Form1的代码窗口中加入以下代码:

Dim dicTemp As New Scripting.Dictionary

Private Sub Form_Load()
List1.AddItem "apple"
List1.AddItem "banana"
List1.AddItem "grape"
List1.AddItem "orange"
List1.AddItem "strawberry"

dicTemp.Add "apple", "苹果"
dicTemp.Add "orange", "柑橘"
dicTemp.Add "banana", "香蕉"
dicTemp.Add "grape", "葡萄"
dicTemp.Add "strawberry", "草莓"
Text1.Text = ""
End Sub

Private Sub Form_Unload(Cancel As Integer)
dicTemp.RemoveAll
Set dicTemp = Nothing
End Sub

Private Sub List1_Click()
Dim astr As String

astr = List1.List(List1.ListIndex)

Text1.Text = dicTemp.Item(astr)
End Sub

Private Sub List1_DblClick()
Dim astr As String

Text1.Text = ""
astr = List1.List(List1.ListIndex)
List1.RemoveItem (List1.ListIndex)
dicTemp.Remove (astr)
End Sub

运行程序,点击List1中的项目,相对应的中文解释就会出现在Text1中间。
上面的程序十分简单,但是这个字典对象具有很多优点:首先这是一个对象,这就使得程序的可读性和可维护性变的十分好。同时它的操作也十分简单,利用AddItem方法就可以增加一个具有关键字的项目,利用Item属性就可以返回一个关键字相对应的项目,利用Remove方法就可以删除一个项目。

摘自:网络整理

更多精彩>>>

深入Scripting Runtime Library相关推荐

  1. Glibc辅助运行库 (C RunTime Library): crt0.o,crt1.o,crti.o crtn.o,crtbegin.o crtend.o

    crt1.o, crti.o, crtbegin.o, crtend.o, crtn.o 等目标文件和daemon.o(由我们自己的C程序文件产生)链接成一个执行文件.前面这5个目标文件的作用分别是启 ...

  2. C Runtime Library 的来历

    由于我看到的文章也是转载的且未提供原文链接,所以这里没有提供原文链接,深表抱歉! msvcrt.dll (名称:Microsoft C Runtime Library)提供了printf,malloc ...

  3. Microsoft Visual C++ Runtime Library Runtime Error的解决的方法

    打开浏览器时,出现Microsoft Visual C++ Runtime Library Runtime Error错误,初步预计是软件冲突,可能有多种出错的方式,我的是浏览器自己主动关闭. 一. ...

  4. Microsoft Visual C++ Runtime Library 错误解决办法

    今天安装软件时,出现"Microsoft Visual C++ Runtime Library"错误,网上查了下解决方法,得以解决. 现在分享下,给碰到相同问题的朋友. 微软官方解 ...

  5. VC++六种Runtime Library

    2019独角兽企业重金招聘Python工程师标准>>> VC++中有六种Runtime Library的类型: 类型 简称 含义 对应的库名称 备注 Single-Threaded ...

  6. C Runtime Library来历, API, MFC, ATL关系

    首先说明,我google了半天,想找到英文的关于这个资料,但是实在找不到,只好转载国人的讨论. CRT原先是指Microsoft开发的C Runtime Library,用于操作系统的开发及运行.后来 ...

  7. 带你玩转Visual Studio(八)——带你跳出坑爹的Runtime Library坑

    在Windows下进行C++的开发,不可避免的要与Windows的底层库进行交互,然而VS下的一项设置MT.MTd.MD和MDd却经常让人搞迷糊,相信不少人都被他坑过,特别是你工程使用了很多第三库的时 ...

  8. CRT(C Runtime Library)—— C/C++运行时库

    C runtime library(part of the C standard library) 任何一个 C 程序,它的背后都有一套庞大的代码来进行支撑,使得该程序得以运行在更高级别上,而不必担心 ...

  9. C Runtime Library 与 STL

    C Runtime Library 的来历 msvcrt.dll (名称:Microsoft C Runtime Library)提供了printf,malloc,strcpy等C语言库函数,并且为使 ...

最新文章

  1. 小米开源FALSR算法:快速精确轻量级的超分辨率模型
  2. oracle引用vs,VS2013中使用oracle,有关引用哪个.dll
  3. python cli_click python cli 开发包
  4. linux kernel 调度,在Linux中,实时调度_kernel_开发99编程知识库
  5. 深入比特币原理(二)——比特币密钥地址生成
  6. 遥感基础编程语言——IDL的应用
  7. 服务器上装的hadoop系统,在Ubuntu Server 18.04.1中安装Hadoop系统环境
  8. 一级注册结构工程师《基础考试》题库历年真题
  9. 使用计算机编辑文档的同时 还可播放mp3,win7系统电脑怎么使用Windows Movie Maker剪辑音频文件...
  10. 解决swift实现的websocket与后台通信问题:websocket is disconnected: masked and rev data is not currently supported
  11. Codeforces 731C Socks By Assassin
  12. Netty 的零拷贝
  13. 服务器被黑怎么用防御系统解决
  14. java利用poi导出excel功能-附带图片导出
  15. python毕业设计项目源码选题(5)校园网站系统毕业设计毕设作品开题报告开题答辩PPT
  16. 感动!刘若英和陈升的那些往事
  17. 游戏陪玩小程序怎么开发-游戏陪玩小程序功能
  18. git安装及使用教程
  19. 英汉互译教程---生词
  20. Flex中Tree的用法备忘(增删改查节点)

热门文章

  1. 看动画轻松理解「Trie树」
  2. 未来五年,iOS 开发如何前行?
  3. C 语言:春节回家聚会,只有我没带对象!
  4. 为什么我们要升级到 iOS 12.1.3?
  5. CSDN 创始人蒋涛:AI 定义的开发者时代
  6. 开源面临生死存亡之际!
  7. 1 亿人民币的差距!硅谷初创公司工资期权调查报告里的 0.1% 与 1%
  8. 管理中的计算机应用真题,0051管理系统中计算机应用试题历年真题
  9. linux下mysql的用户名,linux下设置mysql用户名及密码
  10. 带你重新认识ZooKeeper!java数组长度可变吗