對象模型
從 Visual Basic 的第一版至今,VB中有關檔案的處理都是通凳狼察過使用 Open 、Write以及其它一些相關的語句和函式來實現的。隨著軟體技術的不斷發展,加上
面向對象編程概念的日臻成熟,這些檔案操作語句已經不能適應軟體不斷增加的複雜程度的需要了。因此,從VB6.0開始,微軟提出了一個全新的檔案系統對象FSO。
不僅少企雅可以象使用傳統檔案操作語句那樣擔章酷實現檔案的創建、改變、移動和刪除,而且可以檢測是否存在指定的資料夾,如果存在,那么,這個資料夾又位於磁碟上的什麼位置恥習淋艱。更令人高興的是FSO 對象模型還可以獲取關於檔案和資料夾的信息,如名稱、創建日期或修改日期等以及系統中使用的
驅動器的信息,如驅動器的種類是CD-ROM還是
可移動磁碟,當前磁碟的剩餘空間還有多少。而以前要獲取這些信息必須通過調用Windows
API函式集中的相應函式才能實現。
在Scripting 類型庫 (Scrrun.Dll)中,它同時包含了Drive、Folder、File、FileSystemObject和TextStream五個對象。其中Drive用來收集驅動器的信息,如可用磁碟空間或驅動器的類型;Folder用於剃故多創建、刪除或移動資料夾,同時可以進行向系統查詢資料夾的路徑等操作;File的基本操作和Folder基本相同,所不同的是Files的操作主要是針對磁碟上的檔案進行的;FileSystemObject是FSO對象模型中最主要對象,它提供了一套完整的可用於創建、刪除檔案和資料夾,收集驅動器、資料夾、檔案相關信息的方法。需要注意的是,FSO對象模型提供的方法是冗餘的,也就是說在實際使用中,FSO對象模型中包含的不同對象的不同方法進行的卻是同樣的操作,而且FileSystemObject對象的方法直接作用於其餘對象,所以在後面的文章中並沒有單獨提到FileSystemObject對象,千萬不要以為沒有提到就不重要,事實上FileSystemObject對象在整個FSO對象模型中無處不在;最後的TextStream對象則是用來完成對檔案的讀寫操作的。
在初步了解了FSO對象模型之後,境煮下面我們通過實際的代碼對不同的對象進行進一步的闡述。
模型套用
創建模型
由於
FSO對象包含在Scripting 類型庫 (Scrrun.Dll)中,所以在使用前首先需要在在工程中引用這個檔案,單擊“工程”,“引用”,然後在“引用”對話框中選中“Microsoft Scripting Runtime”前的
複選框,然後單擊“確定”。
要創建FSO對象可以採用兩種方法,一種是將一個變數聲明為FSO對象類型:Dim fsoTest As New FileSystemObject;另一種是通過CreateObject方法創建一個FSO 對象:Set fsoTest = CreateObject(“Scripting.FileSystemObject")。在實際使用中具體採用哪種聲明方法,可根據個人的使用習慣而定。
完成了FSO對象模型的創建之後,就可以利用創建的對象模型的方法訪問下屬各個對象的屬性來獲取所需信息或進行相關操作了,具體的方法在下面結合各個對象分別講述。
Drive對象
上面已經提到Drive對象是用來獲取當前系統中各個
驅動器的信息的。由於Drive對象沒有方法,其套用都是通過屬性表現出來的,所以我們必須熟悉Drive對象的屬性:
AvailableSpace:返回在指定的驅動器或網路共享上的用戶可用的空間容量。
FileSystem:返回指定驅動器使用的檔案系統類型。
FreeSpace:返回指定驅動器上或共享驅動器可用的磁碟空間,這個屬性是唯讀的。
Path :返回指定檔案、資料夾、或驅動器的路徑。
SerialNumber:返回用於唯一標識磁碟
卷標的十進制
序列號。
從上面的屬性可以看到Drive對象基本上包含了日常操作所需的全部的
驅動器信息,因此在使用中是非常方便的。下面通過一個實例講述Drive對象的使用。首先在VB中建立一個工程,然後添加一個
命令按鈕,將其Caption設定為“TestDrive”,然後在click事件中加入以下代碼:
Dim fsoTest As New FileSystemObject
Dim drv1 As Drive,sReturn As String
Set drv1 = fsoTest.GetDrive(“C:\")
sReturn = “Drive " & “C:\" & vbCrLf
sReturn = sReturn & “VolumeName" & drv1.VolumeName & vbCrLf
sReturn = sReturn & “Total Space: " & FormatNumber(drv1.TotalSize / 1024,0)
sReturn = sReturn & “Kb" & vbCrLf
sReturn = sReturn & “Free Space: " & FormatNumber(drv1.FreeSpace / 1024,0)
sReturn = sReturn &;“Kb" & vbCrLf
sReturn = sReturn &;“FileSystem:" & drv1.FileSystem & vbCrLf
MsgBox sReturn
其中
GetDrive方法返回一個與指定路徑中的驅動器相對應的 Drive 對象。該方法的語法格式為object.GetDrive drivespec,object是一個FSO對象的名稱,drivespec用於指定驅動器的名稱。
按F5運行上述代碼,按下TestDrive按鈕就會彈出一個
訊息框顯示C糟的信息。
Folder對象
在FSO 對象模型中,提供了豐富的有關資料夾操作的方法,這些方法分別是:
FileSystemObject對象有關資料夾的方法:
GetSpecialFolder:找出
系統資料夾的路徑。
Folder對象的方法:
Delete :刪除一個資料夾。
Move :移動一個資料夾。
Copy:複製一個資料夾。
Name:檢索資料夾的名稱。
在此需要強調一點,前面我們曾經提到過FSO對象模型包含的方法是冗餘的,所以Folder對象的Delete、Move、Copy方法和FileSystemObject對象的
DeleteFolder、
MoveFolder、
CopyFolder方法實際上是相同的,因此在實際使用中可以任選其中的一種。和Drive對象一樣,下面通過實例演示Folder對象的套用。在VB下新建一個工程,然後在上面添加三個
命令按鈕,然後在Form1的通用部分加入以下代碼:
Option Explicit
Dim fsoTest As New FileSystemObject
Dim folder1 As Folder
並且分別在三個命令按鈕的click事件輸入以下代碼:
Private Sub CmdCreate_Click()
' 獲取 Folder 對象。
Set folder1 = fsoTest.GetFolder(“C:")
'創建資料夾
fsoTest.CreateFolder (“C:\Test")
MsgBox “folder C:\Test has created"
End Sub
Private Sub CmdDelete_Click()
' 獲取 Drive 對象。
Set folder1 = fsoTest.GetFolder(“C:")
'刪除資料夾
fsoTest.DeleteFolder (“C:\Test")
MsgBox“folder C:\Test has deleted"
End Sub
Private Sub CmdGetPro_Click()
'獲取資料夾的有關信息
Dim sReturn As String
Set folder1 = fsoTest.GetFolder(“C:\Windows")
'sReturn = “The folder's Attributes is " & folder1.Attributes & vbCrLf
'獲取一次訪問的時間
sReturn = sReturn & “The folder's last access time is " & folder1.DateLastAccessed & vbCrLf
'獲取最後一次修改的時間
sReturn = sReturn & “The folder's last modify time is " & folder1.DateLastModified & vbCrLf
'獲取資料夾的大小
sReturn = sReturn & “The folder's size is " & FormatNumber(folder1.Size / 1024,0)
sReturn = sReturn & “Kb" & vbCrLf
'判斷檔案或資料夾類型
sReturn = sReturn & “The type is " & folder1.Type & vbCrLf
MsgBox sReturn
End Sub
上述代碼中提到的
CreateFolder方法的語法形式為object.CreateFolder(foldername)。foldername指定了要創建的資料夾的名稱,而
DeleteFolder方法的語法形式為object.DeleteFolder folderspec[,force],其中,folderspec用來指定要刪除的資料夾的名稱,force是一個可選的
布爾型參數,如果希望刪除唯讀屬性的資料夾則將該值設為TRUE,默認為FALSE。至於代碼中用到的 Folder 對象的屬性限於篇幅,就不詳細介紹了,讀者可參考VB文檔中的相關內容。
File對象
由於有關File對象的複製,刪除,移動等操作和Folder對象類似,所以這部分內容就不再重複。這裡主要講述利用File對象和TextStream對象操作文本檔案。
通常對文本檔案的操作包括在文本檔案中創建數據,在文本檔案中添加數據,刪除文本檔案的數據等操作。這些操作都可以通過File對象和FileSystemObject對象的相關方法完成。不過在使用之前,首先要創建一個文本檔案,這可以通過三種方法完成。一種方法是使用FileSystemObject對象的 CreateTextFile 方法。要創建一個空文本檔案,可以用以下語句:
Dim fsoTest As New FileSystemObject,fil1 As File
Set fil 1= fsoTest.CreateTextFile(“c:\testfile.txt",True)
第二種方法是使用 FileSystemObject 對象帶 ForWriting 標誌設定的 OpenTextFile 方法,
Dim fsoTest As New FileSystemObject,ts1 As New TextStream
Set ts1 = fsoTest.OpenTextFile(“c:\testfile.txt",ForWriting)
Dim fsoTest As New FileSystemObject,fil 1As File,ts 1As TextStream
Set fsoTest = CreateObject(“Scripting.FileSystemObject")
fsoTest.CreateTextFile (“c:\testfile.txt")
Set fil1 = fsoTest.GetFile(“c:\testfile.txt")
Set ts1 = fil1.OpenAsTextStream(ForWriting)
其中CreateTextFile方法的第一個參數用來指定,第二個參數用來指定如果磁碟上已經存在要創建的檔案是否覆蓋,TRUE表示覆蓋,FALSE表示不覆蓋,省略表示不覆蓋;OpenTextFile方法的第一個參數確定要打開的文本檔案,第二個參數表示對該檔案進行寫操作;
OpenAsTextStream方法的參數和OpenTextFile方法的第二個參數含義相同。
在創建了寫入數據的文本之後就可以利用TextStream 對象的 Write 或 WriteLine 方法了,它們之間的區別在於 WriteLine 在指定的字元串末尾添加換行符,而Write方法沒有。如果想要向文本檔案中添加一個空行,可以使用
WriteBlankLines方法。在完成寫的動作之後,用Close方法關閉打開的文本檔案。如果要讀取一個存在的文本檔案的內容,就要用到 TextStream 對象的 Read、 ReadLine 或
ReadAll方法;這些方法的區別是 Read:從一個檔案中讀取指定數量的字元 ;ReadLine:讀取一整行(緊跟,但不包括,換行符); ReadAll :讀取一個文本檔案的所有內容。下面在一個VB的工程中演示上述的效果。
在VB中新建一個工程,然後在Form1上添加兩個
命令按鈕,然後輸入以下代碼:
Private Sub CmdRead_Click()
Dim fsoTest As New FileSystemObject,file1 As File,ts As TextStream,s As String
Set file1 = fsoTest.GetFile(“C:\testfile.txt")
Set ts = file1.OpenAsTextStream(ForReading)
'讀取一行
s = ts.ReadLine
MsgBox s
ts.Close
End Sub
Private Sub CmdWrite_Click()
Dim txtfile As File,ts As TextStream
Set txtfile = fsoTest.GetFile(“c:\testfile.txt")
Set ts = txtfile.OpenAsTextStream(ForWriting)
'使用Write方法寫入一行。
ts.Write (“This is only a Test")
' 寫入一行帶有換行符的文本。
ts.WriteLine (“Testing 1,2,3.")
' 向檔案中寫入三個換行符。
ts.WriteBlankLines ⑶
ts.Close
End Sub
在這裡我們假設已經在磁碟上建立了一個名為testfile.txt的檔案。在按下F5運行時,先單擊Write寫入數據,然後按下Read讀取數據。
File System Object 在VBscript 里的套用
在代碼內操作文本檔案、資料夾及驅動器。它是腳本運行期庫提供的對象之一,對於伺服器ASP頁面內的VBScript和JScript都有效。如果頁面的擴展名為.hta(表示它們是HTA的一部分),它也可用在客戶端的IE 5中。本節僅討論在伺服器上的ASP腳本如何使用FileSystemObject對象。
超級文本應用程式(HTA)由指定的"受信任的"頁面組成,在頁面的<HEAD>;段里包含<HTA: APPLICATION>;元素。例如:
<HTA:APPLICATION ID="objMyApp" APPLICATIONNAME="myApp">
這些頁面可以使用客戶端
腳本引擎中的一些不常用特性,這些特性中有FileSystemObject對象和TextStream對象。關於
超級文本應用程式的更多信息,請訪問Microsoft Workshop網站。
可以使用下面的程式創建一個FileSystemObject對象實例:
' In VBScript:
Dim objMyFSO
Set objMyFSO = Server.CreateObject("Scripting.FileSystemObject")
// In JScript:
var objMyFSO = Server.CreateObject('Scripting.FileSystemObject');
<!-- Server-side with an OBJECT element -->
<OBJECT RUNAT="SERVER" SCOPE="PAGE" ID="objFSO"
PROGID="Scripting.FileSystemObject">
</OBJECT>
在ASP頁面里,增加一個對於FileSystemObject類型庫的引用是非常有用的。這允許使用它直接定義的內置常數,不用像過去那樣用數字等效
表達式代替。整個腳本運行期庫的類型庫可以增加到任何ASP頁面中,代碼如下:
<!-- METADATA TYPE="typelib" FILE="%systemroot%\System32scrrun.dll" -->;如果你是在另一個目錄下安裝Windows,必須編輯FILE的屬性值。
5.4.1 FileSystemObject對象成員概要
FileSystemObject對象提供一個屬性和一系列方法,可用它們來操縱FileSystemObject對象實現的一些從屬對象。這裡提供了全部的內容概要,然後介紹每一個從屬對象。
1. FileSystemObject的屬性
FileSystemObject對象只有一個屬性,它用於得到當前機器上的所有有效驅動器的列表,如表5-4所示:
表5-4 FileSystemObject對象的屬性及說明
2. FileSystemObject的方法
FileSystemObject對象提供了使用從屬對象的一系列方法,從屬對象包括Drive、Folder和File等對象。它也實現了用於TextStream對象的兩個方法:CreateTextFile和OpenTextFile。根據所使用的對象的類型,將方法劃分為三類。
⑴ 與驅動器有關的方法
與驅動器有關的方法如表5-5所示:
表5-5 與驅動器有關的方法及說明
| |
| 如果在drivespec中指定的驅動器存在,則返回True,否則返回False。 drivespec參數可以是一個驅動器字母,或者是檔案、資料夾的完整絕對路徑 |
| 返回drivespec指定的驅動器所對應的Drive對象。drivespacec可以包含冒號、路徑分隔設定或者是網路共享名即:"C"、"C:"、"C:"及"\machinesharename" |
| 用字元串返回drivespec指定的驅動器的名稱。drivespec參數必須是檔案或資料夾的絕對路徑,或者僅僅是驅動器字母,例如:"c:"或"c" |
⑵ 與資料夾有關的方法
與資料夾有關的方法如表5-6所示:
表5-6 與資料夾有關的方法及說明方 法說 明BuildPath(path,name) 在已有的路徑path上增添名字為name的檔案或資料夾,如果需要,則增添路徑分隔設定'' CopyFolder(source,destination,overwrite) 從指定的源資料夾source(可以包含通配符)中複製一個或多個資料夾到指定的目標資料夾destination,包含了源資料夾中的所有檔案。如果source包含通配符或destination末尾是路徑
分隔設定(''),那么認為destination是要放置源資料夾的拷貝的資料夾。否則的話,認為destination是要創建的新資料夾的路徑名。如果destination資料夾已經存在且overwrite參數設定為False,將產生錯誤,預設的overwrite參數是True CreateFolder(foldername) 創建一個路徑名為foldername的資料夾。如果foldername已經存在將產生錯誤 DeleteFolder(folderspec,force) 刪除由folderspec指定的一個或多個資料夾(可以在路徑的最後部分包含通過配符)及資料夾中的所有內容。如果可選的force參數設定為true,那么即使資料夾包含的檔案具有隻讀屬性,也將刪除該資料夾。預設的force參數是False FolderExist(folderspec)如果folderspec指定的資料夾存在則返回True,否則返回False。folderspec參數可以包含資料夾的絕對或相對路徑,或者僅僅是當前資料夾中看到的資料夾名 GetAbsolutePathName(pathspec) 返回明確指定資料夾的路徑,其中要考慮到當前資料夾的路徑。例如,如果當前資料夾是"c:docssales",而pathspec是"jan",返回的字元是"c:docssalesjan"。通配符、".."和"\"路徑操作符都是可以接受的 GetFolder(folderspec) 返回folderspec指定的資料夾對應的Folder對象。folderspec可以是資料夾的相對的或絕對的路徑 GetParentFolderName(pathspec) 返回pathspec檔案或資料夾的上一級資料夾。不檢驗該資料夾是否存在 GetSpecialfolder(folderspec) 返回一個特定的Windows資料夾相對應的Folder對象。參數folderspec的允許值是WindowsFolder(0)、SystemFolder⑴和TemporaryFolder⑵ MoveFolder(source,destination) 將source指定的一個或多個資料夾移動到destination指定的資料夾。在source里可以包含通配符,但在destination中不行。如果source包含通配符或destination末尾是路徑
分隔設定(''),則認為destination是要放置源資料夾的資料夾,否則認為它是一個新資料夾的完整路徑和名字。如果目的資料夾destination已經存在則產生錯誤 ⑶ 與檔案有關的方法 表5-7:與檔案有關的方法方 法說 明CopyFile(source,destination, overwrite)將source(可包含通配符)指定的一個或多個檔案複製到指定的目標資料夾destination。如果source包含通配符或destination末尾是路徑分隔設定(''),那么認為destination是資料夾。否則認為destination為一新檔案的完全路徑和名稱。如果目標資料夾已經存在且overwrite參數設定為False,將產生錯誤。預設的overwrite參數是True CreateTextFile(filename,overwrite, unicode) 用指定的檔案名稱filename在磁碟上創建一個新的文本檔案,並返回與其對應的TextStream對象,如果可選的overwrite參數設定為True,則覆蓋同一路徑下已有的同名檔案。預設的overwrite參數是False。如果可選的unicode參數設定為True,則該檔案的內容將存儲為Unicode文本,預設的unicode參數是False DeleFile(filespec,force)刪除由filespec指定的一個或多個檔案(可以在路徑的最後部分包含通配符)。如果可選的force參數設定為true,那么也刪除具有隻讀屬性的檔案。預設的force參數是False FileExists(filespec)如果filespec指定的檔案存在則返回True,否則返回False。filespec參數可以包含檔案的
絕對路徑或相對路徑,或者是當前資料夾中的檔案名稱 GetBaseName(filespec)返回filespec指定的檔案的名稱,即包含檔案路徑但去掉了檔案的擴展名 GetExtensionName(filespec)返回filespec指定的檔案的擴展名 GetFile(filespec)返回filespec指定的檔案所對應的File對象。可以指定檔案的相對或絕對路徑 GetFileName(pathspec)返回pathspec指定的檔案的路徑或檔案名稱,如果沒有檔案名稱就返回最後的資料夾名。不檢查該檔案或資料夾是否存在 GetTempName()返回一個隨機產生的檔案名稱,用於完成運算所需的臨時檔案或資料夾 MoveFile(source,destination)將source指定的一個或多個源檔案移動到destination指定的目的資料夾。在source里可以包含通配符,但destination不行。如果source包含通過配符或destination末尾是路徑分隔設定(''),那么認為destination是一資料夾。否則,認為destination是一新資料夾的完整路徑和名稱。如果目的資料夾已經存在則產生錯誤 OpenTextFile(filename,iomode,create, format)創建一個名叫做filename的檔案,或打開一個現有的名為filename的檔案,並且返回一個與其相關的TextStream對象。filename參數可以包含絕對或相對路徑。iomode參數指定了所要求的訪問類型。允許的數值是ForReading⑴(預設)、ForWriting⑵、ForAppending⑻。當寫入或追加到一個不存在的檔案時,如果create參數設定為true,就將創建一個新檔案。預設的create參數是False。format參數說明對檔案讀或寫的數據格式。允許數值是:TristatetFalse(0)(預設),按照ASCII格式打開;TristatetTrue(-1),按照Unicode格式打開;TristateDefault(-2),用系統預設格式打開 Unicode檔案使用兩個位元組標識每個字元,取消了ASCII字元最多256個的限制。 5.4.2 使用驅動器 下面是使用FileSystemObject對象的簡單例子,它使用DriveExists方法得到現有的驅動器字母的列表: ' In VBScript Set objFSO = Server.CreateObject("Scripting.FileSystemObject") For intCode = 65 To 90 'ANSI codes for 'A' to 'Z' strLetter = Chr(intCode) If objFSO.DriveExists(strLetter) Then Response.Write "Found drive " & strLetter & ":<BR>" End If Next 1. Folder對象 Driver對象的RootFolder屬性返回一個Folder對象,通過該對象可訪問這個驅動器內的所有的內容。可以使用這個Folder對象的屬性和方法遍歷驅動器上的目錄,並得到該資料夾和其他資料夾的屬性。 ⑴ Folder對象的屬性 Folder對象提供一組屬性,可用這些屬性得到關於當前資料夾的更多信息,也可以改變該資料夾的名稱。其屬性及說明如表5-9所示: 表5-9 Folder 對象的屬性及說明 屬 性 說 明 Attributes 返回資料夾的屬性。可以是下列值中的一個或其組合:Normal(0)、ReadOnly⑴、Hidden⑵、System⑷、Volume(名稱)⑻、Directory(資料夾)⒃、Archive(32)、Alias(64)和Compressed(128)。例如,一個隱藏的唯讀檔案,Attributes的值為3 DateCreated 返回該資料夾的創建日期和時間 DateLastAccessed 返回最後一次訪問該資料夾的日期和時間 DateLastModified 返回最後一次修改該資料夾的日期和時間 Drive 返回該資料夾所在的驅動器的驅動器字母 Files 返回Folder對象包含的Files集合,表示該資料夾內所有的檔案 IsRootFolder 返回一個布爾值說明該資料夾是否是當前驅動器的根資料夾 Name 設定或返回資料夾的名字 ParentFolder 返回該資料夾的父資料夾對應的Folder對象 Path 返回資料夾的絕對路徑,使用相應的長檔案名稱 ShortName 返回DOS風格的8.3形式的資料夾名
返回DOS風格的8.3形式的資料夾的絕對路徑
Size
返回包含在該資料夾里所有檔案和子資料夾的大小
SubFolers
返回該資料夾內包含的所有子資料夾對應的Folders集合,包括隱藏資料夾和
系統資料夾Type
如果可能,返回一個資料夾的說明字元串(例如,"Recycle Bin")
⑵ Folder對象的方法
Folder對象提供一組可用於複製、刪除和移動當前資料夾的方法。這些方法的運行方式與FileSystemObject對象的
CopyFolder、DeleFolder和
MoveFolder方法相同,但這些方法不要求source參數,因為源檔案就是這個資料夾。這些方法及說明如表5-10所示:
表5-10 Folder對象的方法及說明
方法說明
Copy(destination,overwrite)
將這個資料夾及所有的內容複製到destination指定的資料夾。如果destination的末尾是路徑分隔設定(''),那么認為destination是放置拷貝資料夾的一個資料夾。否則認為destination是要創建的新資料夾的路徑和名字。如果目標資料夾已經存在且overwrite參數設定為False,將產生錯誤,預設的overwrite參數是True
Delete(force)
刪除資料夾及裡面的所有內容。如果可選的force參數設定為True,即使資料夾設定為唯讀或含有隻讀的檔案,也將刪除該資料夾。預設的force是False
Move(destination)
將資料夾及裡面所有的內容移動到destination指定的資料夾。如果destination的末尾是路徑分隔設定(''),那么認為destination是放置移動資料夾的一個資料夾。否則認為destination是一個新的資料夾的路徑和名字。如果目標資料夾已經存在,則出錯
CreateTextFile
(filename,overwrite,unicode)
用指定的檔案名稱在資料夾內創建一個新的文本檔案,並且返回一個相應的TextStream對象。如果可選的overwrite參數設定為True,將覆蓋任何已有的同名檔案。預設的overwrite參數是False。如果可選的unicode參數設定為True,檔案的內容將存儲為unicode文本。預設的unicode是False
結束語
通過上面的介紹,我們可以看到FSO對象模型的確在傳統的檔案操作語句之外,提供了一種更方便,功能更強大的訪問檔案的操作方法。不過,我們還需要注意到FSO對象模型還不完善,使用的FSO對象模型還不支持創建隨機檔案或
二進制檔案。要創建隨機檔案和二進制檔案,仍然要使用帶 Random 或 Binary 標誌的 Open 命令。但從FSO對象模型的實際套用來看,我們仍然可以將FSO對象模型作為一種比較簡便的檔案操作解決方案。
(註:上述代碼均在VB6.0 SR3)
完成了FSO對象模型的創建之後,就可以利用創建的對象模型的方法訪問下屬各個對象的屬性來獲取所需信息或進行相關操作了,具體的方法在下面結合各個對象分別講述。
Drive對象
上面已經提到Drive對象是用來獲取當前系統中各個
驅動器的信息的。由於Drive對象沒有方法,其套用都是通過屬性表現出來的,所以我們必須熟悉Drive對象的屬性:
AvailableSpace:返回在指定的驅動器或網路共享上的用戶可用的空間容量。
FileSystem:返回指定驅動器使用的檔案系統類型。
FreeSpace:返回指定驅動器上或共享驅動器可用的磁碟空間,這個屬性是唯讀的。
Path :返回指定檔案、資料夾、或驅動器的路徑。
SerialNumber:返回用於唯一標識磁碟
卷標的十進制
序列號。
從上面的屬性可以看到Drive對象基本上包含了日常操作所需的全部的
驅動器信息,因此在使用中是非常方便的。下面通過一個實例講述Drive對象的使用。首先在VB中建立一個工程,然後添加一個
命令按鈕,將其Caption設定為“TestDrive”,然後在click事件中加入以下代碼:
Dim fsoTest As New FileSystemObject
Dim drv1 As Drive,sReturn As String
Set drv1 = fsoTest.GetDrive(“C:\")
sReturn = “Drive " & “C:\" & vbCrLf
sReturn = sReturn & “VolumeName" & drv1.VolumeName & vbCrLf
sReturn = sReturn & “Total Space: " & FormatNumber(drv1.TotalSize / 1024,0)
sReturn = sReturn & “Kb" & vbCrLf
sReturn = sReturn & “Free Space: " & FormatNumber(drv1.FreeSpace / 1024,0)
sReturn = sReturn &;“Kb" & vbCrLf
sReturn = sReturn &;“FileSystem:" & drv1.FileSystem & vbCrLf
MsgBox sReturn
其中
GetDrive方法返回一個與指定路徑中的驅動器相對應的 Drive 對象。該方法的語法格式為object.GetDrive drivespec,object是一個FSO對象的名稱,drivespec用於指定驅動器的名稱。
'sReturn = “The folder's Attributes is " & folder1.Attributes & vbCrLf
'獲取一次訪問的時間
sReturn = sReturn & “The folder's last access time is " & folder1.DateLastAccessed & vbCrLf
'獲取最後一次修改的時間
sReturn = sReturn & “The folder's last modify time is " & folder1.DateLastModified & vbCrLf
'獲取資料夾的大小
sReturn = sReturn & “The folder's size is " & FormatNumber(folder1.Size / 1024,0)
sReturn = sReturn & “Kb" & vbCrLf
'判斷檔案或資料夾類型
sReturn = sReturn & “The type is " & folder1.Type & vbCrLf
MsgBox sReturn
End Sub
上述代碼中提到的
CreateFolder方法的語法形式為object.CreateFolder(foldername)。foldername指定了要創建的資料夾的名稱,而
DeleteFolder方法的語法形式為object.DeleteFolder folderspec[,force],其中,folderspec用來指定要刪除的資料夾的名稱,force是一個可選的
布爾型參數,如果希望刪除唯讀屬性的資料夾則將該值設為TRUE,默認為FALSE。至於代碼中用到的 Folder 對象的屬性限於篇幅,就不詳細介紹了,讀者可參考VB文檔中的相關內容。
File對象
由於有關File對象的複製,刪除,移動等操作和Folder對象類似,所以這部分內容就不再重複。這裡主要講述利用File對象和TextStream對象操作文本檔案。
通常對文本檔案的操作包括在文本檔案中創建數據,在文本檔案中添加數據,刪除文本檔案的數據等操作。這些操作都可以通過File對象和FileSystemObject對象的相關方法完成。不過在使用之前,首先要創建一個文本檔案,這可以通過三種方法完成。一種方法是使用FileSystemObject對象的 CreateTextFile 方法。要創建一個空文本檔案,可以用以下語句:
Dim fsoTest As New FileSystemObject,fil1 As File
Set fil 1= fsoTest.CreateTextFile(“c:\testfile.txt",True)
第二種方法是使用 FileSystemObject 對象帶 ForWriting 標誌設定的 OpenTextFile 方法,
Dim fsoTest As New FileSystemObject,ts1 As New TextStream
Set ts1 = fsoTest.OpenTextFile(“c:\testfile.txt",ForWriting)
Dim fsoTest As New FileSystemObject,fil 1As File,ts 1As TextStream
Set fsoTest = CreateObject(“Scripting.FileSystemObject")
fsoTest.CreateTextFile (“c:\testfile.txt")
Set fil1 = fsoTest.GetFile(“c:\testfile.txt")
Set ts1 = fil1.OpenAsTextStream(ForWriting)
其中CreateTextFile方法的第一個參數用來指定,第二個參數用來指定如果磁碟上已經存在要創建的檔案是否覆蓋,TRUE表示覆蓋,FALSE表示不覆蓋,省略表示不覆蓋;OpenTextFile方法的第一個參數確定要打開的文本檔案,第二個參數表示對該檔案進行寫操作;
OpenAsTextStream方法的參數和OpenTextFile方法的第二個參數含義相同。
在創建了寫入數據的文本之後就可以利用TextStream 對象的 Write 或 WriteLine 方法了,它們之間的區別在於 WriteLine 在指定的字元串末尾添加換行符,而Write方法沒有。如果想要向文本檔案中添加一個空行,可以使用
WriteBlankLines方法。在完成寫的動作之後,用Close方法關閉打開的文本檔案。如果要讀取一個存在的文本檔案的內容,就要用到 TextStream 對象的 Read、 ReadLine 或
ReadAll方法;這些方法的區別是 Read:從一個檔案中讀取指定數量的字元 ;ReadLine:讀取一整行(緊跟,但不包括,換行符); ReadAll :讀取一個文本檔案的所有內容。下面在一個VB的工程中演示上述的效果。
在VB中新建一個工程,然後在Form1上添加兩個
命令按鈕,然後輸入以下代碼:
Private Sub CmdRead_Click()
Dim fsoTest As New FileSystemObject,file1 As File,ts As TextStream,s As String
Set file1 = fsoTest.GetFile(“C:\testfile.txt")
Set ts = file1.OpenAsTextStream(ForReading)
'讀取一行
s = ts.ReadLine
MsgBox s
ts.Close
End Sub
Private Sub CmdWrite_Click()
Dim txtfile As File,ts As TextStream
Set txtfile = fsoTest.GetFile(“c:\testfile.txt")
Set ts = txtfile.OpenAsTextStream(ForWriting)
'使用Write方法寫入一行。
ts.Write (“This is only a Test")
' 寫入一行帶有換行符的文本。
ts.WriteLine (“Testing 1,2,3.")
' 向檔案中寫入三個換行符。
ts.WriteBlankLines ⑶
ts.Close
End Sub
在這裡我們假設已經在磁碟上建立了一個名為testfile.txt的檔案。在按下F5運行時,先單擊Write寫入數據,然後按下Read讀取數據。
File System Object 在VBscript 里的套用
在代碼內操作文本檔案、資料夾及驅動器。它是腳本運行期庫提供的對象之一,對於伺服器ASP頁面內的VBScript和JScript都有效。如果頁面的擴展名為.hta(表示它們是HTA的一部分),它也可用在客戶端的IE 5中。本節僅討論在伺服器上的ASP腳本如何使用FileSystemObject對象。
超級文本應用程式(HTA)由指定的"受信任的"頁面組成,在頁面的<HEAD>;段里包含<HTA: APPLICATION>;元素。例如:
<HTA:APPLICATION ID="objMyApp" APPLICATIONNAME="myApp">
這些頁面可以使用客戶端
腳本引擎中的一些不常用特性,這些特性中有FileSystemObject對象和TextStream對象。關於
超級文本應用程式的更多信息,請訪問Microsoft Workshop網站。
可以使用下面的程式創建一個FileSystemObject對象實例:
' In VBScript:
Dim objMyFSO
Set objMyFSO = Server.CreateObject("Scripting.FileSystemObject")
// In JScript:
var objMyFSO = Server.CreateObject('Scripting.FileSystemObject');
<!-- Server-side with an OBJECT element -->
<OBJECT RUNAT="SERVER" SCOPE="PAGE" ID="objFSO"
PROGID="Scripting.FileSystemObject">
</OBJECT>
在ASP頁面里,增加一個對於FileSystemObject類型庫的引用是非常有用的。這允許使用它直接定義的內置常數,不用像過去那樣用數字等效
表達式代替。整個腳本運行期庫的類型庫可以增加到任何ASP頁面中,代碼如下:
<!-- METADATA TYPE="typelib" FILE="%systemroot%\System32scrrun.dll" -->;如果你是在另一個目錄下安裝Windows,必須編輯FILE的屬性值。
5.4.1 FileSystemObject對象成員概要
FileSystemObject對象提供一個屬性和一系列方法,可用它們來操縱FileSystemObject對象實現的一些從屬對象。這裡提供了全部的內容概要,然後介紹每一個從屬對象。