主頁原文:
http://blog.csdn.net/vbcrack/article/details/308144windows還給我們提供了一個叫做FileSystemObject(簡稱FSO)對象。FSO對象模型中包括了計(jì)算機(jī)文件系統(tǒng)所有的對象。見下表。利用這些對象可以更方便的操作文件系統(tǒng)。
對象
功能
Drive允許收集系統(tǒng)的驅(qū)動器信息,諸如驅(qū)動器的可用空間
Folder允許創(chuàng)建、刪除或移動文件夾,并向系統(tǒng)查詢文件夾的名稱、路徑等等
Files允許創(chuàng)建、刪除或移動文件,并向系統(tǒng)查詢文件的名稱、路徑等等
FileSysterObject此為主要對象,提供一整套用于創(chuàng)建、刪除、搜集相關(guān)信息,以及通常的操作驅(qū)動器,文件夾,和文件的方法。
TextStream允許讀寫文本文件
下面我們一起來看看怎樣用FSO對象來顯示、新建、修改以及刪除目錄。
FSO對象模型包含在Scripting的類型庫中,此類型庫存在于Scrrun.dll文件中.使用FSO對象模型,首先要建立一個FileSystemObject對象。有兩種方法可以實(shí)現(xiàn)。一種是從”工程”菜單中的”引用”對話框選擇”Microsoft Scripting Runtime”項(xiàng),然后在代碼窗口中聲明一個FileSystemObject類型的變量.語句如下:
Dim fso As New FileSystemObject
另一種方法是在代碼中使用CreatObject方法動態(tài)的創(chuàng)建一個FileSystemObject對象.語句如下:
Dim fso As Object ‘ 聲明對象變量
Set fso = CreatObject(“Scripting. FileSystemObject”) ‘創(chuàng)建FSO對象
我們具體看看FileSystemObject的主要屬性.
1、驅(qū)動器
(1) Drives屬性是FileSystemObject對象的唯一屬性,它返回Drives集合中所有可用驅(qū)動器的只讀集合。對于可刪除的驅(qū)動器,不需要將媒體插入其中,就可以在Drives集合中顯示出來。下面是它的主要屬性有兩個:一個是Count,另一個是Item.Count屬性返回Drives集合或Dictionary對象中的條目數(shù).Item屬性用來返回或設(shè)置Drives集合或Dictionary對象中與指定關(guān)鍵字相關(guān)的項(xiàng)目.
下面代碼說明了如何獲得Drives集合,以及如何用For Eacn……Next語句來訪問該集合中的每個Drive:
Sub ShowDriveList()
Dim fs As Object, d, dc, s,n
創(chuàng)建文件系統(tǒng)對象
Set fs = CreatObject(“Scripting. FileSystemObject”)
創(chuàng)建驅(qū)動器集合
Set dc= fs.Drives
'取的驅(qū)動器對象
For Each d in dc
s = s & d.DriveLetter & “-” ‘格式化文本
If d.DriverType = Remote Then ‘如果是Remote類型的驅(qū)動器
n = d.ShareName ‘取得它的共享名
Else
n = d.volumeName ‘否則取得它的卷標(biāo)
End if
s= s& n & vbCrLf ‘格式化文本
Next
MsgBox s ‘顯示文本
End sub
(2) 當(dāng)然我們也可以用Drive對象.Drive對象提供了對磁盤驅(qū)動器或網(wǎng)絡(luò)共享屬性的訪問方法.下面是它的主要屬性及其解釋:
Availablespace驅(qū)動器已用空間DriveLetter驅(qū)動器指定的字母
Freespace驅(qū)動器剩余空間DriverType驅(qū)動器類型
TotalSize驅(qū)動器全部空間FileSystem驅(qū)動器文件系統(tǒng)
IsReady驅(qū)動器是否已準(zhǔn)備Path驅(qū)動器根目錄
SerizlNumber驅(qū)動器序列號VolumeName驅(qū)動器卷標(biāo)
ShareName驅(qū)動器共享名
主要的方法就是GetDrive,此方法用來訪問一個已有的驅(qū)動器,該方法返回一個與指定路徑中的驅(qū)動器相對應(yīng)的Drive對象。下面的代碼中,我們將說明怎樣取得一個指定的驅(qū)動器的相關(guān)信息:
Sub ShowFreeSpace(drvPath) ‘顯示指定目錄下的驅(qū)動器的信息
Dim fs As Object, d, s
Set fs = CreateObject("Scripting.FileSystemObject") ‘創(chuàng)建文件系統(tǒng)對象
Set d = fs.GetDrive(fs.GetDriveName(drvPath)) ‘創(chuàng)建并得到指定取目錄下的驅(qū)動器
s = "Drive" & UCase(drvPath) & "-" ‘格式化文本
s = s & d.VolumeName & vbCrLf ‘得到驅(qū)動器的卷標(biāo)
s = s & "FreeSpace:" & FormatNumber(d.FreeSpace / 1024, 0)
'計(jì)算驅(qū)動器的剩余磁盤空間
s = s & "Kbytes"
MsgBox s ‘顯示
End Sub
下面是filesystemobject的其他方法
CreateFolder該方法的作用是創(chuàng)建一個文件夾。所要創(chuàng)建的文件夾必須是不存在的,否則出錯。
CreateTextFile該方法的作用是產(chǎn)生一個指定的文件名,并返回一個TextStream對象,該對象可被用于對指定的文件進(jìn)行讀寫。如果overwrite參數(shù)為False或未指定,對于一個已存在的文件,將產(chǎn)生錯誤。
DeleteFile該方法的作用是刪除一個指定的文件。如果指定的文件不存在,則出錯。
DeleteFolder該方法的作用是刪除一個文件夾及其內(nèi)容。如果沒有發(fā)現(xiàn)匹配的文件夾則出錯。該方法不能確定文件夾中是否包含內(nèi)容。
DriveExists該方法的作用是用來確定驅(qū)動器是否存在。如果指定的驅(qū)動器存在,則返回True,否則返回False。但對于可刪除介質(zhì)的驅(qū)動器,即使沒有介質(zhì)存在,DriveExists方法也返回True,因此最好使用IsReady屬性確定驅(qū)動器是否準(zhǔn)備就緒。
FileExists該方法的作用是判斷指定的文件對象是否存在于當(dāng)前文件夾
FolderExists該方法的作用是判斷指定的文件夾對象是否存在于當(dāng)前文件夾
GetDrive該方法的作用是返回一個在指定路徑中的與某個驅(qū)動器相對應(yīng)的Drive對象。對于網(wǎng)絡(luò)驅(qū)動器,將首先檢查該共享是否存在。
GerDriveName該方法的作用是返回包括某一指定路徑上的驅(qū)動器名的字符串。如果驅(qū)動器不能確定,則返回一個0長度字符串。該方法只對指定的路徑起作用,它并不試圖解析路徑,也不檢查指定路徑是否存在。
GetExtensionName該方法的作用是返回指定路徑中最后一個組成部分的擴(kuò)展名。
GetFile該方法的作用是返回指定路徑中與某一文件相關(guān)的File對象。一定要保證所指定的文件是實(shí)際存在的。否則將產(chǎn)生錯誤。
GetFileName該方法的作用是返回指定路徑的最后一個組成部分的文件名。
GetFolder該方法的作用是返回指定路徑上的與某個文件夾相關(guān)的Folder對象.要保證指定的文件夾是實(shí)際存在的,否則會出錯. 使用Folder對象的第一部就是先用FileSystemObjectd的GetFolder方法得到Folder對象
GetParentFolderName該方法的作用是返回一個包含指定路徑上的最后一個組成部分的父文件夾的名稱。
MoveFile該方法的作用是將一個或多個文件從一個地方移動到另一個地方。
MoveFolder該方法的作用是移動一個或多個文件夾,如果源路徑包含通配符,或目的路徑以斜杠(/)為結(jié)束,則表明目的路徑為已存在的路徑,在此文件夾中移動相匹配的文件夾.否則,認(rèn)為目的路徑是一個要創(chuàng)建的目標(biāo)文件夾的名字.如果目的路徑為一個已存在的文件或目的路徑為一個目錄,則出錯.如果沒有任何文件與源路徑中的通配符相匹配也出錯.
OpenTextFile該方法可用來打開一個指定的文件,并返回一個TextStream對象。用于讀文件或追加文件。
2、文件夾
對文件夾的操作,我們可以使用folder對象,它提供了對文件夾所有屬性和方法的訪問.下表市對其主要屬性的解釋:
DateCreated返回指定文件或文件夾的創(chuàng)建日期和時間
DateLastAccessed返回最后一次訪問指定文件或文件夾的日期和時間
Drive返回指定文件或文件夾所在的驅(qū)動器符號
Files返回由File對象組成的所有Files集合,這些Files集合包含在指定的文件夾中,包括設(shè)置了隱藏和系統(tǒng)文件屬性的那些文件夾
IsRootFolder如果指定的文件夾是根文件夾,則返回True,否則返回False
Name設(shè)置或返回指定文件或文件夾的名稱
ParentFolder返回指定文件或文件夾的父文件夾的Folder對象
Path返回指定文件、文件夾或驅(qū)動器的路徑
ShortName返回較早的需要8.3文件命名約定的程序所使用的短文件名
ShortPath返回較早的需要8.3文件命名約定的程序所使用的短路徑
Size對文件來說,本屬性返回以字節(jié)為單位的文件大小;對文件夾來說,返回以字節(jié)為單位包括其中所有文件或子文件夾的大小
SubFolders返回包含所有文件夾的一個Folders集合,這些文件夾包含在某個特定文件夾中, 包括設(shè)置了隱藏和系統(tǒng)文件屬性的那些文件夾
Type返回指定文件或文件夾的類型信息.
使用Folder對象的第一部就是先用FileSystemObjectd的GetFolder方法得到Folder對象, 該方法的作用是返回指定路徑上的與某個文件夾相關(guān)的Folder對象.要保證指定的文件夾是實(shí)際存在的,否則會出錯.
讓我們來看一看其中的各種屬性及其用法吧.
(1)Attributes屬性可以返回文件或文件夾的屬性,或者設(shè)置他們的新屬性.所設(shè)屬性可以是以下值中任意一個或多個的邏輯組合.
常數(shù)值說明
Normal0為一般文件,不設(shè)置屬性
ReadOnly1為只讀文件,屬性為讀/寫
Hidden2為隱藏文件,屬性為讀/寫
System4為系統(tǒng)文件,屬性為讀/寫
Volume8為磁盤驅(qū)動器卷標(biāo),屬性為只讀
Directory16為文件夾或目錄,屬性為只讀
Archive32在上次備份后已經(jīng)改變的文件,屬性為讀/寫
Alias64為鏈接或快捷方式,屬性為只讀
Compressed128為壓縮文件,屬性為只讀
(2)DateCreated屬性返回指定文件或文件夾的創(chuàng)建日期和時間,本屬性為只讀屬性.
下面是用法:
Sub ShowFolderList( folderspec ) ‘folderspec 為文件夾名稱
Dim fs , f, f1,fc , s
Set fs = CreateObject(“Scripting.FileSystemObject”)
Set f = fs.GetFolder(folderspec) ‘得到folderspec文件夾相關(guān)的folder對象
Set fc = f.SubFolders ‘得到folder對象所包含的文件夾的folder集合
For Each fi in fc ‘訪問folder集合中的每一個folder
s= s & f1.name ‘格式化要顯示的文本
s= s & vbCrLf
Next
MsgBox s ‘用對話框顯示信息
End Sub
(3)DateLastModified屬性用來返回最后一次修改指定文件或文件夾的日期和時間,本屬性為只讀.
下面代碼用一個文件舉例說明了DataLastModified屬性的用法:
Sub ShowFileAccessInfo(filespec)
Dim fs,f,s
Set fs = CreateObject(“Scripting.FileSystemObject”)
Set f = fs.GetFolder(folderspec) ‘得到folderspec文件夾相關(guān)的folder對象
s= Ucase(filespec) & vbCrLf
s= s& “Created:” & f.DateCreate & vbCrLf
s= s & “Last Accessed :” & f.DateLastAccessed & vbCrLf
s= s & “Last Modifide :” & f.DateLastModified
MsgBox s, 0,”File Access Info”
End Sub
(4)Type屬性返回關(guān)于某個文件或文件夾類型的信息.例如對于以.TXT結(jié)尾的文本文件來說,本屬性會返回”Text Document”.下面的代碼舉例說明了返回某個文件夾類型的Type屬性的用法.在這個示例中,試圖將Recycle Bin的路徑或其他唯一的文件夾提供給過程.
Sub ShowFileSize( filespec )
Dim fs,f,s
Set fs = CreateObject(“Scripting.FileSystemObject”)
Set f = fs.GetFolder(folderspec) ‘得到folderspec文件夾相關(guān)的folder對象
S = Ucase(f.Name) & “is a ” & f.Type ‘格式化文本
MsgBox s,o, “File Size Info ” ‘顯示信息
End Sub
主要方法有:
(1)Copy方法:
該方法的作用是拷貝一個指定的文件或文件夾到指定的目錄.該方法和FileSystemObject.CopyFile方法的作用相同
(2)CreateTextFile方法:
該方法的作用是產(chǎn)生一個指定的文件名,并返回一個TextStream對象,該對象可被用于對指定的文件進(jìn)行讀寫.如果overwrite參數(shù)為False或未指定,對于一個已存在的文件,將產(chǎn)生錯誤.
(3)Delete方法:
該方法的作用是刪除一個指定的文件或文件夾.如果指定的文件或文件夾不存在,則發(fā)生一個錯誤.對于一個File或Folder來說,Delete方法的運(yùn)行的結(jié)果和執(zhí)行FileSystemObject.DeleteFile或FileSystemObject.DeleteFolder的結(jié)果是一樣的.Delete方法執(zhí)行時與指定的文件夾中時候有內(nèi)容無關(guān).
(4)Move
該方法用來將一個指定的文件夾或文件從一個地方移動到另一個地方,如果只是想移動一個文件或文件夾,則使用Move方法和使用FileSystemObject.MoveFile或FileSystemObject.MoveFolder操作的結(jié)果是一樣的,但是如果要同時移動多個文件或文件夾,則只能使用后者。
講了這么多,還是讓我們來看一下具體的實(shí)現(xiàn)方法:
1、 創(chuàng)建一個文件夾
可以使用FileSystemObject對象的CreateFolder方法來實(shí)現(xiàn),但要創(chuàng)建的文件夾必須不存在,否則出錯。特別注意,F(xiàn)ileSystemObject對象不能創(chuàng)建或刪除驅(qū)動器。
下面的例子可以在應(yīng)用程序所在目錄下創(chuàng)建一個文件夾
Sub CreateFolder(folderspec)
Dim fs
Set fs = CreatObject(“Scripting.FileSystemObject”)
fs.CreaterFolder(folderspec )
End sub
2、 刪除一個或多個文件夾
可以使用FileSystemObject對象的Deletfolder方法,或者folder對象的Delete方法
Sub DeleteFolder(folderspec)
Dim fs
Set fs = CreatObject(“Scripting.FileSystemObject”)
fs.DeleteFolder(folderspec & “100”)
‘Set f = fs.GetFolder(folderspec) ‘得到folderspec文件夾相關(guān)的folder對象
‘f.Delete
End sub
3、移動一個或多個文件夾
可以使用FileSystemObject對象的Movefolder方法,或者folder對象的Move方法
Sub MoveFolder(folderspec)
Dim fs
Set fs = CreatObject(“Scripting.FileSystemObject”)
fs.MoveFolder(folderspec , “c:/windows/”)
‘Set f = fs.GetFolder(folderspec) ‘得到folderspec文件夾相關(guān)的folder對象
‘f.Move(“c:/windows/”)
End sub
4、一個或多個文件夾
可以使用FileSystemObject對象的Copyfolder方法,或者folder對象的Copy方法。
Sub CopyFolder(folderspec)
Dim fs
Set fs = CreatObject(“Scripting.FileSystemObject”)
fs.CopyFolder(folderspec , “c:/windows/”)
‘Set f = fs.GetFolder(folderspec) ‘得到folderspec文件夾相關(guān)的folder對象
‘f.Copy(“c:/windows/”)
End sub