深入Scripting Runtime Library 之一 (轉)

gugu99發表於2008-03-02
深入Scripting Runtime Library 之一 (轉)[@more@]

深入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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章