深入Scripting Runtime Library 之一

來源:互聯網
上載者:User

深入Scripting Runtime Library 之一

www.applevb.com

    什麼是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:/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:/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退出。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.