深入Scripting Runtime Library 之一 (轉)
深入Scripting Runtime Library 之一
什麼是Scripting Runtime Library?按照一般的說法,Scripting Runtime Library(以下簡稱SR)提供了
“忘記”放到中的基本的操作何。
點選選單的 Project | Referrences 項,在References選擇視窗的References列表中選擇 Scripting Runtime
項。然後單擊 “確定”鍵選擇退出就可以將Scripting Runtime Library加入到VB工程檔案中。(在下面的中在
新增程式碼之前都要這一步操作,凡是在下面提到加入SR庫,都是指這一步)一個SR物件包括FileSystem
物件和Directionary物件,分別對應檔案系統操作和字典操作。
例如 Dim Sys 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 & ": "
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控制元件,兩個Commanutton控制元件,然後
在Form1中加入以下程式碼:
Dim fsoSys As New Scripting.FileSystemObject
Dim fsoFolder 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:temp") Then
MsgBox ("目錄c:temp已經存在,無法建立目錄")
Else
Set fsoFolder = fsoSys.CreateFolder("c:temp")
Set fsoFolder = Nothing
End If
End Sub
Private Sub Command2_Click()
'檢查目錄是否存在,如存在則刪除目錄
If fsoSys.FolderExists("c:temp") Then
fsoSys.DeleteFolder ("c:temp")
Else
MsgBox ("目錄c:temp不存在")
End If
End Sub
執行程式,程式建立一個指向C盤根目錄的Folder物件並獲取它的所有子資料夾加入到TreeView中,雙擊
TreeView1中的 "c:" 就可以開啟分支檢視c:目錄下的所有子目錄名。點選Command1就可以建立 c:temp
目錄,如果目錄已存在程式會給出提示;點選Command2刪除c:temp目錄。
三、對於檔案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:" + 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退出。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1000276/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 探秘Runtime - 深入剖析CategoryGo
- 《深入淺出MFC》學習筆記之一 (轉)筆記
- C Runtime Library來歷, API, MFC, ATL關係API
- 深入淺出 Runtime(一):初識
- 深入理解Objective-C RuntimeObject
- 深入淺出 testing-library
- Oracle Shell ScriptingOracle
- Scripting on the Java platformJavaPlatform
- Batch Scripting TutorialBAT
- 死磕Objective-C runtime執行時之一Object
- 第 64 期深入淺出 Golang RuntimeGolang
- 深入理解Objective-C-Runtime-isaObject
- 深入理解-dl_runtime_resolve
- VBScript Scripting Engine初探
- Objective-C Runtime 執行時之一:類與物件Object物件
- 深入淺出 Runtime(三):訊息機制
- 深入淺出 Runtime(六):相關面試題面試題
- 深入淺出 Runtime(四):super 的本質
- 深入淺出 Runtime(二):資料結構資料結構
- 深入理解 Objective-C Runtime 機制Object
- 走近 WSH(Windows Scripting Host)Windows
- 深入解析kubernetes controller-runtimeController
- 深入理解shared pool共享池之library cache的library cache lock系列四
- 深入理解shared pool共享池之library cache的library cache pin系列三
- XDS: Cross-Device Scripting AttacksROSdev
- FTP Client library in C# (轉)FTPclientC#
- OGG-15050 Error loading Java VM runtime library: (2 No such file or directory)ErrorJava
- access 轉 sql 之一SQL
- How to Prevent Cross-Site Scripting AttacksROS
- Library cache lock/pin詳解(轉)
- C#速成(之一) (轉)C#
- 深入淺出Android訊息系統之一Android
- ios萬能跳轉介面方法(Runtime)iOS
- .NET Framework 之 Common Language Runtime (轉)Framework
- 深入理解shared pool共享池之library cache系列一
- 深入理解shared pool共享池之library cache系列二
- 深入瞭解JavaScript執行過程(JS系列之一)JavaScriptJS
- 老司機帶你深入分析 Laravel 響應之一Laravel