【引用地址】http://club.excelhome.net/blog-238368-1693.html
一個高手的代碼:遍歷文件夾下的文件夾
Public Fso As Object
****Sub getFldList()
Set Fso = CreateObject("Scripting.FileSystemObject")
Fldnm (CreateObject("Shell.Application").BrowseForFolder(0, "請選擇文件夾", 0, "").Self.Path & "")
End Sub
Function Fldnm(pth$)
Dim Fld
[A65536].End(3)(2) = pth
For Each Fld In Fso.getfolder(pth).subfolders
Fldnm (Fld)
Next
End Function
VBA FSO****對象模型詳解
一仪或、簡****介
文件系統(tǒng)對象FSO的英文全稱是File System Object 乍赫,這種對象模型提出了有別于傳統(tǒng)的文件操作語句處理文件和文件夾的方法肋联。通過采用object.method這種在面向?qū)ο缶幊讨袕V泛使用的語法吨拗,將一系列操作文件和文件夾的動作通過調(diào)用對象本身的屬性直接實現(xiàn)。
FSO 對象模型不僅可以象使用傳統(tǒng)文件操作語句那樣實現(xiàn)文件的創(chuàng)建外厂、改變劝赔、移動和刪除丁鹉,而且可以檢測是否存在指定的文件夾喂江,如果存在召锈,那么,這個文件夾又位于磁盤上的什么位置获询。更令人高興的是FSO 對象模型還可以獲取關(guān)于文件和文件夾的信息涨岁,如名稱、創(chuàng)建日期或最近修改日期等以及當(dāng)前系統(tǒng)中使用的驅(qū)動器的信息吉嚣,如驅(qū)動器的種類是CD-ROM還是可移動磁盤梢薪,當(dāng)前磁盤的剩余空間還有多少。而以前要獲取這些信息必須通過調(diào)用Windows API函數(shù)集中的相應(yīng)函數(shù)才能實現(xiàn)尝哆。
FSO對象模型包含在Scripting 類型庫 (Scrrun.Dll)中秉撇,它同時<u .="text-underline: wave" style="word-wrap: break-word;">包含了</u>****<u .="text-underline: wave" style="word-wrap: break-word;">Drive</u>****<u .="text-underline: wave" style="word-wrap: break-word;">、</u>****<u .="text-underline: wave" style="word-wrap: break-word;">Folder</u>****<u .="text-underline: wave" style="word-wrap: break-word;">较解、</u>****<u .="text-underline: wave" style="word-wrap: break-word;">File</u>****<u .="text-underline: wave" style="word-wrap: break-word;">畜疾、</u>****<u .="text-underline: wave" style="word-wrap: break-word;">FileSystemObject</u>****<u .="text-underline: wave" style="word-wrap: break-word;">和</u>****<u .="text-underline: wave" style="word-wrap: break-word;">TextStream</u>****<u .="text-underline: wave" style="word-wrap: break-word;">五個對象</u>。其中Drive用來收集驅(qū)動器的信息印衔,如可用磁盤空間或驅(qū)動器的類型;Folder用于創(chuàng)建姥敛、刪除或移動文件夾奸焙,同時可以進(jìn)行向系統(tǒng)查詢文件夾的路徑等操作;File的基本操作和Folder基本相同彤敛,所不同的是Files的操作主要是針對磁盤上的文件進(jìn)行的与帆;FileSystemObject是FSO對象模型中最主要對象,它提供了一套完整的可用于創(chuàng)建墨榄、刪除文件和文件夾玄糟,收集驅(qū)動器、文件夾袄秩、文件相關(guān)信息的方法阵翎。需要注意的是,F(xiàn)SO對象模型提供的方法是冗余的之剧,也就是說在實際使用中郭卫,F(xiàn)SO對象模型中包含的不同對象的不同方法進(jìn)行的卻是同樣的操作,而且FileSystemObject對象的方法直接作用于其余對象背稼,所以在后面的文章中并沒有單獨提到FileSystemObject對象贰军,千萬不要以為沒有提到就不重要,事實上FileSystemObject對象在整個FSO對象模型中無處不在蟹肘;最后的TextStream對象則是用來完成對文件的讀寫操作的词疼。
創(chuàng)建****FSO****對象模型:
由于FSO對象包含在Scripting 類型庫 (Scrrun.Dll)中俯树,所以在使用前首先需要在在工程中引用這個文件,單擊“工程”贰盗,“引用”许饿,然后在“引用”對話框中選中“Microsoft Scripting Runtime”前的復(fù)選框,然后單擊“確定”童太。
要創(chuàng)建FSO對象可以采用兩種方法米辐,一種是將一個變量聲明為FSO對象類型:Dim fsoTest As New FileSystemObject;另一種是通過CreateObject方法創(chuàng)建一個FSO 對象:Set fsoTest = CreateObject(“Scripting.FileSystemObject")书释。在實際使用中具體采用哪種聲明方法翘贮,可根據(jù)個人的使用習(xí)慣而定。
完成了FSO對象模型的創(chuàng)建之后爆惧,就可以利用創(chuàng)建的對象模型的方法訪問下屬各個對象的屬性來獲取所需信息或進(jìn)行相關(guān)操作了
FileSystemObject對象有許多用來操作文件系統(tǒng)的方法和屬性狸页。下面先看一個例子,如下面的代碼:
Sub FileInfo( )
Dim fs As Object
Dim objFile As Object
Dim strMsg As String
Set fs = CreateObject("Scripting.FileSystemObject")
Set objFile = fs.GetFile("C:\Windows\System.ini")
strMsg = "文件名:" & objFile.Name & vbCrLf
strMsg = strMsg & "硬盤:" & objFile.Drive & vbCrLf
strMsg = strMsg & "創(chuàng)建日期:" & objFile.DateCreated & vbCrLf
strMsg = strMsg & "修改日期:" & objFile.DateLastModified & vbCrLf
MsgBox strMsg, , "文件信息"
End Sub
FileInfo過程首先使用CreateObject函數(shù)創(chuàng)建一個FileSystemObject對象扯再,用來訪問計算機的文件系統(tǒng)芍耘。然后,使用GetFile方法創(chuàng)建一個File對象并返回對System.ini文件的引用熄阻。接著斋竞,利用File對象的Name屬性、Drive屬性秃殉、DateCreated屬性坝初、DateLastModified屬性返回文件的相應(yīng)信息。
二钾军、****FileSystemObject****中的對象的方法和屬性
(一)****FSO****對象
l ****屬性:
1****鳄袍、****Drives****屬性
Drives屬性是FileSystemObject對象唯一的屬性,返回對硬盤驅(qū)動器集合(Drives)的引用吏恭,是一個只讀屬性拗小。其語法為:
oFileSysObj.Drives
其中,oFileSysObj代表任何能夠返回FileSystemObject對象的對象變量樱哼。
Drives屬性返回的集合中的每個成員都是Drive對象哀九,表示系統(tǒng)中一個可用的驅(qū)動器〈浇福可以使用For … Next循環(huán)迭代系統(tǒng)中所有驅(qū)動器勾栗,或者使用Drives集合的Item方法讀取某個Drive對象(代表系統(tǒng)中的某個驅(qū)動器)。
例如盏筐,下面的代碼創(chuàng)建計算機驅(qū)動盤清單:
Sub DrivesList( )
Dim fs As Object
Dim colDrives As Object
Dim Drive As Object
Dim strDrive As String
Set fs = CreateObject("Scripting.FileSystemObject")
Set colDrives = fs.Drives
For Each Drive In colDrives
strDrive = "驅(qū)動器" & Drive.DriveLetter & ":"
Debug.Print strDrive
Next
End Sub
l ****方法:
1****围俘、****BuildPath****方法
其語法為:
oFileSysObj.BuildPath (Path,Name)
其中,oFileSysObj為任何能夠返回FileSystemObject對象的對象變量。參數(shù)Path必需界牡,指定驅(qū)動器或文件夾路徑簿寂,String類型,可以是絕對路徑也可以是相對路徑宿亡,不一定要包含驅(qū)動器名常遂。參數(shù)Name必需,指定附加在Path后的文件夾或文件路徑挽荠,String類型克胳。參數(shù)Path或Name都不一定要求是當(dāng)前已經(jīng)存在的路徑或文件夾。
BuildPath方法通過合并參數(shù)Path和文件夾或文件名生成一個字符串圈匆,并且在必要的地方加上正確的主機系統(tǒng)路徑分隔符漠另。該方法不能檢驗新的文件夾或文件名的有效性。
與人工合并兩個字符串相比跃赚,使用BuildPath函數(shù)的惟一好處就是它能夠選擇正確的路徑分隔符笆搓。
2****、****FileExists****方法
FileExists方法用于判斷指定的文件是否存在纬傲,若存在則返回True满败。其語法為:
oFileSysObj.FileExists(FileSpec)
其中,oFileSysObj代表任何能夠返回FileSystemObject對象的對象叹括。參數(shù)FileSpec必需算墨,代表文件的完整路徑,String類型汁雷,不能包含有通配符米同。
如果用戶有充分的權(quán)限,F(xiàn)ileSpec可以是網(wǎng)絡(luò)路徑或共享名摔竿,例如:
If ofs.FileExists("\TestPath\Test.txt") Then
示例
Sub IfFileExists( )
Dim fs As Object
Dim strFile As String
Set fs = CreateObject("Scripting.FileSystemObject")
strFile = InputBox("請輸入文件的完整名稱:")
If fs.FileExists(strFile) Then
MsgBox strFile & "已經(jīng)找到."
Else
MsgBox "該文件不存在."
End If
End Sub
3****、****GetFile****方法
GetFile方法用來返回一個File對象少孝。其語法為:
oFileSysObj.GetFile (FilePath)
其中继低,oFileSysObj代表任何能夠返回FileSystemObject對象的對象變量。參數(shù)FilePath必需稍走,指定路徑和文件名袁翁,String類型⌒隽常可以是絕對路徑或相對路徑粱胜。如果FilePath是一個共享名或網(wǎng)絡(luò)路徑,GetFile確認(rèn)該驅(qū)動器或共享是File對象創(chuàng)建進(jìn)程的一部分狐树。如果參數(shù)FilePath指定的路徑的任何部分不能連接或不存在焙压,就會產(chǎn)生錯誤。
GetFile方法返回的是File對象,而不是TextStream對象涯曲。File對象不是打開的文件野哭,主要是用來完成如復(fù)制或移動文件和詢問文件的屬性之類的方法。盡管不能對File對象進(jìn)行寫或讀操作幻件,但可以使用File對象的OpenAsTextStream方法獲得TextStream對象拨黔。
要獲得所需的FilePath字符串,首先應(yīng)該使用GetAbsolutePathName方法绰沥。如果FilePath包含網(wǎng)絡(luò)驅(qū)動器或共享篱蝇,可以在調(diào)用GetFile方法之前用DriveExists方法來檢驗所需的驅(qū)動器是否可用。
因為在FilePath指定的文件不存在時會產(chǎn)生錯誤徽曲,所以應(yīng)該在調(diào)用GetFile之前調(diào)用FileExists方法確定文件是否存在零截。
必須用Set語句將File對象賦給一個局部對象變量。
4****疟位、****GetFileName****方法
GetFileName方法返回給定路徑的文件名稱部分瞻润。其語法為:
oFileSysObj.GetFileName (Path)
其中,oFileSysObj表示任何能夠返回FileSystemObject對象的對象變量甜刻。參數(shù)Path必需绍撞,指定路徑說明,String類型得院。如果不能從給定的Path確定文件名傻铣,則返回一個零長字符串(”")。Path可以為絕對路徑或相對路徑祥绞。
GetFileName方法不能檢驗Path中是否存在指定的文件非洲。Path可以為網(wǎng)絡(luò)驅(qū)動器或共享。GetFileName本身不具有智能蜕径,它認(rèn)為字符串中不屬于驅(qū)動器說明的最后部分就是一個文件名两踏,更像是一個字符串處理函數(shù)而不是對象處理方法。
5****兜喻、****GetFileVersion****方法
GetFileVersion方法返回文件的版本梦染。
6****、****CopyFile****方法
CopyFile方法用來復(fù)制文件朴皆,將文件從一個文件夾復(fù)制到另一個文件夾帕识。其語法為:
oFileSysObj.CopyFile Source,Destination [,OverwriteFiles]
其中,oFileSysObj代表任何能夠返回FileSystemObject對象的對象變量遂铡。參數(shù)Source必需肮疗,指定要復(fù)制的文件的路徑和名稱,String類型扒接。參數(shù)Destination必需伪货,代表復(fù)制文件的目標(biāo)路徑和文件名(可選)们衙,String類型。參數(shù)OverwriteFiles可選超歌,表示是否覆蓋一個現(xiàn)有文件的標(biāo)志砍艾,True表示覆蓋,F(xiàn)alse表示不覆蓋,Boolean類型,默認(rèn)值為True程储。
參數(shù)source中源路徑可以是絕對路徑或相對路徑枝笨,源文件名可包含通配符但源路徑不能。在參數(shù)Destination中不能包含通配符。
如果目標(biāo)路徑或文件設(shè)置為只讀,則無論OverwriteFiles參數(shù)的值如何,都將無法完成CopyFile方法桃焕。如果參數(shù)OverwriteFiles設(shè)置為False且Destination指定的文件已經(jīng)存在,則會產(chǎn)生一個運行時錯誤“文件已經(jīng)存在”捧毛。如果在復(fù)制多個文件時出現(xiàn)錯誤观堂,CopyFile方法將立即停止復(fù)制操作,該方法不具有撤銷錯誤前文件復(fù)制操作的返回功能呀忧。如果用戶有充分的權(quán)限师痕,那么source或destination可以是網(wǎng)絡(luò)路徑或共享名,例如:
CopyFile "\NTSERV1\RootTest\test.txt","C:\RootOne"
CopyFile方法可以復(fù)制一個保存在特定文件夾中的文件而账。如果文件夾本身有包含文件的子文件夾胰坟,則使用CopyFile方法不能復(fù)制這些文件,應(yīng)該使用CopyFolder方法泞辐。
例如:
Sub CopyFile( )
Dim fs As Object
Dim strFile As String
Dim strNewFile As String
strFile = "C:\test.doc"
strNewFile = "C:\Program Files\test.doc"
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CopyFile strFile, strNewFile
MsgBox "已經(jīng)創(chuàng)建了指定文件的副本."
Set fs = Nothing
End Sub
7****笔横、****CreateTextFile****方法
CreateTextFile方法創(chuàng)建一個新的文件并返回其TextStream對象,其語法為:
oFileSysObj.CreateTextFile Filename [,Overwrite[,Unicode]]
其中咐吼,oFileSysObj代表任何能夠返回FileSystemObject對象的對象變量吹缔。參數(shù)Filename必需,代表任何有效文件名锯茄,String類型涛菠。在Filename中不允許使用通配符。Filename可以是相對路徑也可以是絕對路徑撇吞,如果沒有指定路徑,則使用應(yīng)用程序的當(dāng)前驅(qū)動器或文件夾作為路徑礁叔。如果指定的路徑不存在牍颈,則該方法將失敗。
參數(shù)Overwrite可選琅关,作為一個標(biāo)志煮岁,指定是否覆蓋一個具有相同文件名的現(xiàn)有文件讥蔽,Boolean類型。默認(rèn)值為False画机。
參數(shù)Unicode可選冶伞,作為一個標(biāo)志,指明用Unicode格式還是ASCⅡ格式寫文件步氏,Boolean類型响禽。如果設(shè)置為True,則以Unicode格式創(chuàng)建文件荚醒,否則創(chuàng)建一個ASCⅡ文本文件芋类。默認(rèn)值為False。
只有寫操作才能使新創(chuàng)建的文本文件自動打開界阁,如果以后希望讀取該文件侯繁,則必須選關(guān)閉它再以讀模式重新打開該文件。
如果參數(shù)Filename中指定的路徑設(shè)置為只讀泡躯,則不論參數(shù)Overwrite的值如保贮竟,CreateTextFile方法都將失敗。
如果用戶有充分的權(quán)限较剃,那么參數(shù)Filename可以是網(wǎng)絡(luò)路徑或共享名咕别,例如:
CreateTextFile "\NTSERV1\RootTest\myFile.doc"
必須使用Set語句將TextStream對象賦值給局部對象變量。
8****重付、****MoveFile****方法
MoveFile方法用來移動文件顷级,將文件從一個文件夾移動到另一個文件夾。其語法為:
oFileSysObj.MoveFile source,destination
其中确垫,oFileSysObj代表任何能夠返回FileSystemObject對象的對象變量弓颈。參數(shù)source必需,指定要移動的文件的路徑删掀,String類型翔冀。參數(shù)destination必需,指定文件移動操作中的目標(biāo)位置的路徑披泪,String類型纤子。
如果Source包含通配符或者destination以路徑分隔符結(jié)尾,則認(rèn)為destination是一個路徑款票,否則認(rèn)為destination的最后一部分是文件名控硼。
如果目標(biāo)文件已經(jīng)存在,則將出現(xiàn)一個錯誤艾少。
source可以包含通配符卡乾,但只能出現(xiàn)在它的最后一部分中。
destination參數(shù)不能包含通配符缚够。
source或destination可以是相對路徑或絕對路徑幔妨,可以是網(wǎng)絡(luò)路徑或共享名鹦赎。
MoveFile方法在開始操作前先解析source和destination這兩個參數(shù)。
9****误堡、****DeleteFile****方法
DeleteFile方法刪除指定的一個或多個文件古话。其語法為:
oFileSysObj.DeleteFile FileSpec[,Force]
其中,oFileSysObj代表任何能夠返回FileSystemObject對象的對象變量锁施。參數(shù)FileSpec必需陪踩,代表要刪除的單個文件或多個文件的名稱和路徑,String類型沾谜,可以在路徑的最后部分包含通配符膊毁,可以為相對路徑或絕對路徑。如果在FileSpec中只有文件名基跑,則認(rèn)為該文件在應(yīng)用程序的當(dāng)前驅(qū)動器和文件夾中婚温。參數(shù)Force可選,如果將其設(shè)置為True媳否,則忽略文件的只讀標(biāo)志并刪除該文件栅螟,Boolean類型,默認(rèn)值為False篱竭。
如果指定要刪除的文件已經(jīng)打開力图,該方法將失敗并出現(xiàn)一個“Permission Denied”錯誤。如果找不到指定的文件掺逼,則該方法失敗吃媒。
如果在刪除多個文件的過程中出現(xiàn)錯誤,DeleteFile方法將立即停止刪除操作吕喘,即不能刪除余下的文件部分赘那。該方法不具有撤銷產(chǎn)生錯誤前文件刪除操作的返回功能。
如果用戶有充分的權(quán)限氯质,源路徑或目標(biāo)路徑可以是網(wǎng)絡(luò)路徑或共享名募舟。例如:
DeleteFile “\NTSERV1\RootTest\MyFile.doc”
DeleteFile方法永久性地刪除文件,并不把這些文件移到回收站中闻察。
示例
Sub DeleteFile()
Dim fs As FileSystemObject
Set fs = New FileSystemObject
fs.DeleteFile "C:\test.doc"
MsgBox "刪除了該文件."
End Sub
10****拱礁、****DriveExists****方法
DriveExists方法用來判斷在本地計算機或者網(wǎng)絡(luò)上是否存在指定的磁盤,若存在則返回True辕漂。其語法為:
oFileSysObj.DriveExists (DriveSpec)
其中呢灶,oFileSysObj代表任何能夠返回FileSystemObject對象的對象變量。參數(shù)DriveSpec必需钉嘹,代表路徑或驅(qū)動器名填抬,String類型。如果DriveSpec是一個Windows驅(qū)動器名隧期,則其后面不需要跟冒號飒责,例如“C”和“C:”是一樣的。
DriveExists方法不能返回可移動驅(qū)動器的當(dāng)前狀態(tài)仆潮,要實現(xiàn)這一目的宏蛉,必須使用指定驅(qū)動器的IsReady屬性。
如果用戶有充分的權(quán)限性置,DriveSpec可以是網(wǎng)絡(luò)路徑或共享名拾并,例如:
If ofs.DriveExists("\NTESERV1\d$") Then
在調(diào)用位于某驅(qū)動器上一個遠(yuǎn)程ActiveX服務(wù)器中的函數(shù)前,最好先使用DriveExists方法檢測網(wǎng)絡(luò)上是否存在該驅(qū)動器鹏浅。
示例
Function DriveExists(disk)
Dim fs As Object
Dim strMsg As String
Set fs = CreateObject("Scripting.FileSystemObject")
If fs.DriveExists(disk) Then
strMsg = "驅(qū)動器" & UCase(disk) & "盤已存在."
Else
strMsg = UCase(disk) & "盤未找到."
End If
DriveExists = strMsg
End Function
11****嗅义、****GetDrive****方法
GetDrive方法返回Drive對象,即獲得對指定驅(qū)動器的Drive對象的引用隐砸。其語法為:
oFileSysObj.GetDrive (drivespecifier)
其中之碗,oFileSysObj代表任何能夠返回FileSystemObject對象的對象變量。參數(shù)drivespecifier必需季希,代表驅(qū)動器名褪那、共享名或網(wǎng)絡(luò)路徑,String類型式塌。如果drivespecifier是一個共享名或網(wǎng)絡(luò)路徑博敬,GetDrive確認(rèn)它是Drive對象創(chuàng)建進(jìn)程的一部分,否則會產(chǎn)生運行時錯誤“找不到路徑”峰尝。如果指定的驅(qū)動器沒有連接上或者不存在偏窝,則會出現(xiàn)運行時錯誤“設(shè)備不可用”。
如果要從路徑中導(dǎo)出drivespecifier字符串武学,應(yīng)該首先用GetAbsolutePathName來確保驅(qū)動器是路徑的一部分祭往,然后在調(diào)用GetDriveName從全限定路徑中提取出驅(qū)動器之前,用FolderExists方法檢驗路徑是否有效劳淆,例如:
Dim oFileSys As New FileSystemObject
Dim oDrive As Drives
Path=oFileSys.GetAbsolutePathName(sPath)
If oFileSys.FolderExists(sPath) Then
set oDrive=oFileSys.GetDrive(oFileSys.GetDriveName(sPath))
End If
如果driverspecifier是一個網(wǎng)絡(luò)驅(qū)動器或共享链沼,在調(diào)用GetDrive方法之前,應(yīng)該用DriveExists方法檢驗所需的驅(qū)動器是否可用沛鸵。
必須用Set語句將Drive對象賦給局部對象變量括勺。
示例
Sub DriveInfo()
Dim fs, disk, infoStr, strDiskName
strDiskName = InputBox("輸入驅(qū)動器盤符:", "驅(qū)動器名稱", "C:") Set fs = CreateObject("Scripting.FileSystemObject")
Set disk = fs.GetDrive(fs.GetDriveName(strDiskName))
infoStr = "驅(qū)動器:" & UCase(strDiskName) & vbCrLf
infoStr = infoStr & "驅(qū)動器盤符:" & UCase(disk.DriveLetter) & vbCrLf
infoStr = infoStr & "驅(qū)動器類型:" & disk.DriveType & vbCrLf
infoStr = infoStr & "驅(qū)動文件系統(tǒng):" & disk.FileSystem & vbCrLf
infoStr = infoStr & "驅(qū)動器系列號:" & disk.SerialNumber & vbCrLf
infoStr = infoStr & "字節(jié)的總大小:" & FormatNumber(disk.TotalSize / 1024, 0) & "kb" & vbCrLf
infoStr = infoStr & "驅(qū)動器中的自由空間:" & FormatNumber(disk.FreeSpace / 1024, 0) & "kb" & vbCrLf
MsgBox infoStr, vbInformation, "驅(qū)動器信息"
End Sub
12****、****GetDriveName****方法
GetDriveName方法返回一個包含硬盤名稱或者網(wǎng)絡(luò)共享名稱的字符串曲掰。即返回給定路徑的驅(qū)動器名疾捍,如果從給定的路徑中不能確定驅(qū)動器名,則返回一個零長字符串(””)栏妖。其語法為:
oFileSysObj.GetDriveName (Path)
其中乱豆,oFileSysObj代表任何能夠返回FileSystemObject對象的對象變量。參數(shù)Path必需吊趾,指定路徑宛裕,String類型瑟啃。
GetDriveName不能檢驗Path中是否存在指定的驅(qū)動器。Path可以是網(wǎng)絡(luò)驅(qū)動器或共享揩尸。
示例
Function DriveName(disk)
Dim fs As Object
Dim strDiskName As String
Set fs = CreateObject("Scripting.FileSystemObject")
strDiskName = fs.GetDriveName(disk)
DriveName = strDiskName
End Function
13****蛹屿、****GetExtensionName****方法
返回給定路徑中文件的擴展名。其語法為:
oFileSysObj.GetExtensionName (Path)
其中岩榆,oFileSysObj代表任何能夠返回FileSystemObject對象的對象變量错负。參數(shù)Path必需,表示路徑說明勇边,String類型犹撒。如果不能確定Path中的擴展名,則返回一個零長字符串粒褒。
GetExtensionName方法不能檢驗Path是否有效识颊,Path可以為網(wǎng)絡(luò)路徑或共享。GetExtensionName沒有智能功能怀浆,它簡單地解析一個字符串谊囚,并返回Path最后部分中最后一個點后的文本。
14****执赡、****FolderExists****方法
FolderExists方法可以判斷指定的文件夾是否存在镰踏,若存在則返回True。其語法為:
oFileSysObj.FolderExists(FolderSpec)
其中沙合,oFileSysObj代表任何能夠返回FileSystemObject對象的對象變量奠伪。參數(shù)FolderSpec指定文件夾的完整路徑,String類型首懈,不能包含通配符绊率。
如果用戶有充分的權(quán)限,F(xiàn)olderSpec可以是網(wǎng)絡(luò)路徑或共享名究履,例如:
If ofs.FileExists ("\NTSERV1\d$\TestPath") Then
示例
Sub IfFolderExists( )
Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")
MsgBox fs.FolderExists("C:\Program Files")
End Sub
15****滤否、****GetAbsolutePathName****方法
將相對路徑轉(zhuǎn)變?yōu)橐粋€全限定路徑(包括驅(qū)動器名),返回一個字符串最仑,包含一個給定的路徑說明的絕對路徑藐俺。其語法為:
oFileSysObj.GetAbsolutePathName (Path)
其中,oFileSysObj代表任何能夠返回FileSystemObject對象的對象變量泥彤。參數(shù)Path必需欲芹,代表路徑說明,String類型吟吝。
“.”返回當(dāng)前文件夾的驅(qū)動器名和完整路徑菱父。“..”返回當(dāng)前文件夾的父文件夾的驅(qū)動器名和路徑≌阋耍“filename”返回當(dāng)前文件夾中的文件的驅(qū)動器名官辽、路徑及文件名。
所有相對路徑名均以當(dāng)前文件夾為基準(zhǔn)粟瞬。
如果沒有明確地提供驅(qū)動器作為Path的一部分野崇,就以當(dāng)前驅(qū)動器作為Path參數(shù)中的驅(qū)動器。在Path中可以包含任意個通配符亩钟。
對于映射網(wǎng)絡(luò)驅(qū)動器和共享而言,這種方法不能返回完整的網(wǎng)絡(luò)地址鳖轰,而是返回全限定的本地路徑和本地驅(qū)動器名清酥。
GetAbsolutePathName不能檢驗指定路徑中是否存在某個給定的文件或文件夾。
16****蕴侣、****GetBaseName****方法
返回路徑的最后部分的名稱焰轻,不包含擴展名。其語法為:
oFileSysObj.GetBaseName (Path)
其中昆雀,oFileSysObj代表任何能夠返回FileSystemObject對象的對象變量辱志。參數(shù)Path必需,代表路徑說明狞膘,String類型揩懒。Path中最后部分的文件擴展名不包含在返回的字符串中。
GetBaseName方法不能檢驗Path中是否存在給定的文件或文件夾挽封。GetBaseName方法沒有舍去文件擴展名并返回Path的基本名稱的智能功能已球。也就是說,它不能識別路徑的最后部分是路徑還是文件名辅愿。如果最后部分包括一個或多個點“.”智亮,它僅僅刪除最后一個占以及該點后的文本。所以如果Path為“.”点待,GetBaseName方法返回一個空字符串阔蛉;如果Path為“..”,GetBaseName方法返回“.”癞埠。換句話說状原,它只不過是一個字符串處理函數(shù),而不是一個文件函數(shù)燕差。
17****遭笋、****GetFolder****方法
GetFolder方法返回Folder對象。其語法為:
oFileSysObj.GetFolder (FolderPath)
其中徒探,oFileSysObj代表任何能返回FileSystemObject對象的對象變量瓦呼。參數(shù)FolderPath必需,指定所需文件夾的路徑,String類型央串,可以為相對路徑或絕對路徑磨澡。如果FolderPath是共享名或網(wǎng)絡(luò)路徑,GetFolder確認(rèn)該驅(qū)動器或共享是File對象創(chuàng)建進(jìn)程的一部分质和。如果FolderPath的任何部分不能連接或不存在稳摄,就會產(chǎn)生一個錯誤。
要獲得所需的Path字符串饲宿,首先應(yīng)該使用GetAbsolutePathName方法厦酬。如果FolderPath包含一個網(wǎng)絡(luò)驅(qū)動器或共享,可以在調(diào)用GetFolder方法之前使用DriveExists方法確認(rèn)指定的驅(qū)動器是否可用瘫想。由于GetFolder方法要求FolderPath是一個有效文件夾的路徑仗阅,所以應(yīng)調(diào)用FolderExists方法來檢驗FolderPath是否存在。
必須使用Set語句將Folder對象賦給一個局部對象變量国夜。
示例
Sub FilesInFolder( )
Dim fs As Object
Dim objFolder As Object
Dim objFile As Object
Set fs = CreateObject("Scripting.FileSystemObject")
Set objFolder = fs.GetFolder("C:")
Workbooks.Add
For Each objFile In objFolder.Files
ActiveCell.Select
Selection.Formula = objFile.Name
ActiveCell.Offset(0, 1). Select
Selection.Formula = objFile.Type
ActiveCell.Offset(1, -1). Select
Next
Columns("A:B").Select
Selection.Columns.AutoFit
End Sub
18****减噪、****GetParentFolderName****方法
返回給定路徑中最后部分前的文件夾名,其語法為:
oFileSysObj.GetParentFolderName (Path)
其中车吹,oFileSysObj代表任何能夠返回FileSystemObject對象的對象變量筹裕。參數(shù)Path必需,指定路徑說明窄驹,String類型朝卒。
如果從Path中不能確定父文件夾名,就返回一個零長字符串(””)馒吴。Path可以為相對路徑或絕對路徑扎运。可以是網(wǎng)絡(luò)驅(qū)動器或共享饮戳。
GetParentFolderName方法不能檢驗Path的某個部分是否存在豪治。
GetParentFolderName方法認(rèn)為Path中不屬于驅(qū)動器說明的那部分字符串除了最后一部分外余下的字符串就是父文件夾。除此之外它不做任何其他檢測扯罐,更像是一個字符串解析和處理例程而不是與對象處理有關(guān)的例程负拟。
19****、****GetSpecialFolder****方法
GetSpecialFolder方法返回操作系統(tǒng)文件夾路徑歹河,其中0代表Windows文件夾掩浙,1代表System(系統(tǒng))文件夾,2代表Temp(臨時)文件夾秸歧。其語法為:
oFileSysObj.GetSpecialFolder (SpecialFolder)
其中厨姚,oFileSysObj代表任何能夠返回FileSystemObject對象的對象變量。參數(shù)SpecialFolder必需键菱,為特殊的文件夾常數(shù)谬墙,表示三種特殊系統(tǒng)文件夾中其中一個的值。
可以使用Set語句將Folder對象賦給一個局部對象變量,但是如果只對檢索特殊的文件夾感興趣拭抬,就可以使用下列語句來實現(xiàn):
sPath=oFileSys.GetSpecialFolder (iFolderConst)
或:
sPath=oFileSys.GetSpecialFolder (iFolderConst).Path
由于Path屬性是Folder對象的缺省屬性部默,所認(rèn)第一個語句有效。因為不是給一個對象變量賦值造虎,所以賦給sPath的值是缺省的Path屬性值傅蹂,而不是對象引用。
示例
Sub SpecialFolders( )
Dim fs As Object
Dim strWindowsFolder As String
Dim strSystemFolder As String
Dim strTempFolder As String
Set fs = CreateObject("Scripting.FileSystemObject")
strWindowsFolder = fs.GetSpecialFolder(0)
strSystemFolder = fs.GetSpecialFolder(1)
strTempFolder = fs.GetSpecialFolder(2)
MsgBox strWindowsFolder & vbCrLf & strSystemFolder & vbCrLf _
& strTempFolder, vbInformation + vbOKOnly, "Special Folders"
End Sub
20****算凿、****GetTempName****方法
返回系統(tǒng)創(chuàng)建的一個臨時文件或文件夾名份蝴。其語法為:
oFileSysObj.GetTempName
其中,oFileSysObj代表任何能夠返回FileSystemObject對象的對象變量氓轰。
GetTempName方法不能創(chuàng)建臨時文件或文件夾搞乏,它僅僅提供一個可用于CreateTextFile方法的文件或文件夾名。
一般來說戒努,不必創(chuàng)建自已的臨時文件名。Windows在Windows API中提供了一種算法來創(chuàng)建特殊的臨時文件或文件夾名镐躲,這樣Windows才能識別它們储玫。GetTempName很好地包裝了GetTempFilename API函數(shù)。
21****萤皂、****CreateFolder****方法
CreateFolder方法用于在指定的路徑下創(chuàng)建一個新文件夾撒穷,并返回其Folder對象。其語法為:
oFileSysObj.CreateFolder (Path)
其中裆熙,oFileSysObj代表任何能夠返回FileSystemObject對象的對象變量端礼。參數(shù)Path必需,為一個返回要創(chuàng)建的新文件夾名的表達(dá)式入录,String類型蛤奥。Path指定的路徑可以是相對路徑也可以是絕對路徑,如果沒有指定路徑則使用當(dāng)前驅(qū)動器和目錄作為路徑僚稿。在新的文件夾名中不能使用通配符凡桥。
如果參數(shù)Path指定的路徑為只讀,則CreateFolder方法將失斒赐缅刽;如果參數(shù)Path指定的文件夾已經(jīng)存在,就會產(chǎn)生運行時錯誤“文件已經(jīng)存在”蠢络。如果用戶有充分的權(quán)限衰猛,則參數(shù)Path可以指定為網(wǎng)絡(luò)路徑或共享名,例如:
CreateFolder "\NTSERV1\RootTest\newFolder"
在實際使用時刹孔,必須使用Set語句將Folder對象賦給對象變量啡省,例如:
Dim oFileSys As New FileSystemObjectDim
oFolder As FolderSet oFolder=oFileSys.CreateFolder("MyFolder")
示例
Sub MakeNewFolder( )
Dim fs, objFolder
Set fs = CreateObject("Scripting.FileSystemObject")
Set objFolder = fs.CreateFolder("C:\TestFolder")
MsgBox "創(chuàng)建了一個名稱為" & objFolder.Name & "的文件夾."
End Sub
22****、****CopyFolder****方法
CopyFolder方法用于復(fù)制文件夾,即將一個文件夾的內(nèi)容(包括其子文件夾)復(fù)制到其他位置冕杠。其語法為:
oFileSysObj.CopyFolder Source,Destination[,OverwriteFiles]
其中微姊,參數(shù)oFileSysObj代表任何能夠返回FileSystemObject對象的對象變量。參數(shù)Source必需分预,指定要復(fù)制的文件夾的路徑和文件夾名兢交,String類型,必須使用通配符或者非路徑分隔符來結(jié)束笼痹。參數(shù)Destination必需配喳,指定文件夾復(fù)制操作的目標(biāo)文件夾的路徑,String類型凳干。參數(shù)OverwriteFiles可選晴裹,表示是否被覆蓋一個現(xiàn)有文件的標(biāo)志,True表示覆蓋救赐,F(xiàn)alse表示不覆蓋涧团,Boolean類型。
通配符只能在參數(shù)Source中使用经磅,但是只能放在最后的組件中泌绣。在參數(shù)Destination中不能使用通配符。
除非不允許使用通配符预厌,否則就可以把源文件夾中的所有子文件夾和文件都復(fù)制到Destination指定的文件夾中阿迈,也就是說CopyFolder方法是遞歸的。
如果參數(shù)Destination以一個路徑分隔符結(jié)束或者參數(shù)Source以一個通配符結(jié)束轧叽,CopyFolder方法就認(rèn)為參數(shù)Source中的指定的文件夾存在于參數(shù)Destination中苗沧,否則就創(chuàng)建這樣一個文件夾。例如炭晒,假設(shè)有如下的文件夾結(jié)構(gòu):
CopyFolder "C:\Rootone*","C:\RootTwo"
產(chǎn)生如下的文件夾結(jié)構(gòu):
CopyFolder "C:\Rootone","C:\RootTwo"
產(chǎn)生如下的文件夾結(jié)構(gòu):
如果參數(shù)Destination指定的目標(biāo)路徑或任意文件被設(shè)置成只讀屬性待逞,則不論OverwriteFiles的值如何,CopyFolder方法者將失效网严。
如果OverwriterFiles設(shè)置為False飒焦,而參數(shù)Source指定的源文件夾或任何文件存在于參數(shù)Destination中,將產(chǎn)生運行時錯誤“文件已經(jīng)存在”屿笼。
如果在復(fù)制多個文件夾時出現(xiàn)錯誤牺荠,CopyFolder方法立即停止復(fù)制操作,不再復(fù)制余下要復(fù)制的文件驴一。該方法不具有撤銷產(chǎn)生錯誤前文件復(fù)制操作的返回功能休雌。
如果用戶有充分的權(quán)限,source或destination都可以是網(wǎng)絡(luò)路徑或共享名肝断,例如:
CopyFolder "C:\Rootone","\NTSERV1\d$\RootTwo"
Sub MakeFolderCopy()
Dim fs As FileSystemObjec
Set fs = New FileSystemObject
If fs.FolderExists("C:\TestFolder") Then
fs.CopyFolder "C:\TestFolder", "C:\FinalFolder"
MsgBox "已復(fù)制該文件夾."
End If
End Sub
23****杈曲、****MoveFolder****方法
MoveFolder方法用來移動文件夾驰凛,將文件夾及其文件和子文件夾一起從某個位置移動到另一個位置。其語法為:
oFileSysObj.MoveFolder source,destination
其中担扑,oFileSysObj代表任何能夠返回FileSystemObject對象的對象變量恰响。參數(shù)Source指定要移動的文件夾的路徑,String類型涌献。參數(shù)destination指定文件夾移動操作中目標(biāo)位置的路徑胚宦,String類型。
Source必須以通配符或非路徑分隔符結(jié)束燕垃,可以使用通配符枢劝,但必須出現(xiàn)在最后一部分中。destination不能使用通配符卜壕。除非不允許使用通配符您旁,否則源文件夾中所有的子文件夾和文件都被復(fù)制到destination指定的位置,也就是說MoveFolder方法是遞歸的轴捎。
如果destination用路徑分隔符結(jié)束或者source用通配符結(jié)束鹤盒,MoveFolder就認(rèn)為source中指定的文件夾存在于destination中。例如侦副,假設(shè)有如下文件夾結(jié)構(gòu):
MoveFolder "C:\Rootone*","C:\RootTow"
產(chǎn)生如下文件夾結(jié)構(gòu):
MoveFolder "C:\Rootone","C:\RootTwo"
產(chǎn)生如下文件夾結(jié)構(gòu):
Source和destination可以為絕對路徑或相對路徑昨悼,可以為網(wǎng)絡(luò)路徑或共享名。
MoveFile方法在開始操作前先解析source和destination這兩個參數(shù)跃洛。
24****、****DeleteFolder****方法
DeleteFolder方法用于刪除指定的文件夾及其所有的文件和子文件夾终议。其語法為:
oFileSysObj.DeleteFolder FileSpec[,Force]
其中汇竭,oFileSysObj代表任何能夠返回FileSystemObject對象的對象變量。參數(shù)FileSpec必需穴张,指定要刪除的文件夾的名稱和路徑细燎,String類型。在參數(shù)FileSpec中皂甘,可以在路徑的最后部分包含通配符玻驻,但不能用路徑分隔符結(jié)束,可以為相對路徑或絕對路徑偿枕。
參數(shù)Force可選璧瞬,Boolean類型,如果設(shè)置為True渐夸,將忽略文件的只讀標(biāo)志并刪除這個文件嗤锉。默認(rèn)為False。如果參數(shù)Force設(shè)置為False并且文件夾中的任意一個文件為只讀墓塌,則該方法將失敗瘟忱。如果找不到指定的文件夾奥额,則該方法失敗。
如果指定的文件夾中有文件已經(jīng)打開访诱,則不能完成刪除操作垫挨,且產(chǎn)生一個“Permisson Denied”錯誤。DeleteFolder方法刪除指定文件夾中的所有內(nèi)容触菜,包括其他文件夾及其內(nèi)容九榔。
如果在刪除多個文件或文件夾時出現(xiàn)錯誤,DeleteFolder方法將立即停止刪除操作玫氢,即不能刪除余下的文件夾或文件帚屉。該方法不具有撤銷產(chǎn)生錯誤前文件夾刪除操作的返回功能。
DeleteFolder方法永久性刪除文件夾漾峡,并不把它們移到回收站中攻旦。
如果用戶有充分的權(quán)限,源路徑和目標(biāo)路徑可以是網(wǎng)絡(luò)路徑或共享名生逸,例如:
DeleteFolder "\RootTest"
示例
Sub RemoveFolder( )
Dim fs As FileSystemObject
Set fs = New FileSystemObject
If fs.FolderExists("C:\TestFolder") Then
fs.DeleteFolder "C:\TestFolder"
MsgBox "該文件夾已經(jīng)被刪除."
End If
End Sub
25****牢屋、****OpenTextFile****方法
OpenTextFile方法用于打開(或創(chuàng)建)文本文件以進(jìn)行讀取或?qū)懭氩僮鳎祷匾粋€TextStream對象槽袄。其語法為:
oFileSysObj.OpenTextFile (FileName[,IOMode[,Create[,Format]]])
其中烙无,oFileSysObj代表任何能夠返回FileSystemObject對象的對象變量。參數(shù)FileName必需遍尺,指定要打開的文件的路徑和文件名截酷,String類型,F(xiàn)ileName的路徑部分可為相對路徑或絕對路徑乾戏。參數(shù)IOMode可選迂苛,指定文件打開模式的一個常數(shù)(參見前文的表格),默認(rèn)設(shè)置為ForReading(1)鼓择。參數(shù)Create可選三幻,一個Boolean型標(biāo)志,說明如果在給定的路徑中找不到文件呐能,是否應(yīng)該創(chuàng)建該文件念搬。參數(shù)Format可選,一個Tristate常數(shù)(參見前文的表格)摆出,指定打開文件的格式為ASCⅡ或Unicode格式朗徊,默認(rèn)設(shè)置為ASCⅡ(False)。
如果另一個進(jìn)程已經(jīng)打開了指定文件偎漫,該方法將失敗荣倾,并產(chǎn)生一個“Permission Denied”錯誤。
要保證OpenTextFile方法成功執(zhí)行骑丸,可以在調(diào)用它之前使用GetAbsolutePath和FileExists方法舌仍。
IOMode的值只能是一個常量值妒貌,例如,下面的方法調(diào)用:
lMode=ForReading or ForWritingoFileSys.OpenTextStream(strFileName,lMode) '錯誤
將產(chǎn)生運行時錯誤“無效的過程調(diào)用或參數(shù)”铸豁。
如果用戶有充分的權(quán)限灌曙,F(xiàn)ileName的路徑部分可以是網(wǎng)絡(luò)路徑或共享名,例如:
OpenTextFile "\NTSERV1\d$\RootTwo\myFile.txt"
示例
Sub ReadTextFile( )
Dim fs As Object
Dim objFile As Object
Dim strContent As String
Dim strFileName As String strFileName = "C:\Windows\System.ini"
Set fs = CreateObject("Scripting.FileSystemObject")
Set objFile = fs.OpenTextFile(strFileName)
Do While Not objFile.AtEndOfStream
strContent = strContent & objFile.ReadLine & vbCrLf
Loop
objFile.Close
Set objFile = Nothing
ActiveWorkbook.Sheets(3).Select
Range("A1").Select Selection.Formula = strContent
End Sub
(二)****Drive****對象
上面已經(jīng)提到Drive對象是用來獲取當(dāng)前系統(tǒng)中各個驅(qū)動器的信息的节芥。由于Drive對象沒有方法在刺,其應(yīng)用都是通過屬性表現(xiàn)出來的,所以我們必須熟悉Drive對象的屬性:
AvailableSpace:返回在指定的驅(qū)動器或網(wǎng)絡(luò)共享上的用戶可用的空間容量头镊。
DriveLetter :返回某個指定本地驅(qū)動器或網(wǎng)絡(luò)驅(qū)動器的字母蚣驼,這個屬性是只讀的。
DriveType:返回指定驅(qū)動器的磁盤類型相艇。
FileSystem:返回指定驅(qū)動器使用的文件系統(tǒng)類型颖杏。
FreeSpace:返回指定驅(qū)動器上或共享驅(qū)動器可用的磁盤空間,這個屬性是只讀的坛芽。
IsReady:確定指定的驅(qū)動器是否準(zhǔn)備好留储。
Path :返回指定文件、文件夾咙轩、或驅(qū)動器的路徑获讳。
RootFolder :返回一個 Folder 對象,該對象表示一個指定驅(qū)動器的根文件夾活喊。只讀屬性丐膝。
SerialNumber:返回用于唯一標(biāo)識磁盤卷標(biāo)的十進(jìn)制序列號。
ShareName:返回指定驅(qū)動器的網(wǎng)絡(luò)共享名
TotalSize :以字節(jié)為單位钾菊,返回驅(qū)動器或網(wǎng)絡(luò)共享的總空間大小帅矗。
VolumeName :設(shè)置或返回指定驅(qū)動器的卷標(biāo)名。
從上面的屬性可以看到Drive對象基本上包含了日常操作所需的全部的驅(qū)動器信息结缚,因此在使用中是非常方便的。下面通過一個實例講述Drive對象的使用软棺。首先在VB中建立一個工程红竭,然后添加一個命令按鈕,將其Caption設(shè)置為“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方法返回一個與指定路徑中的驅(qū)動器相對應(yīng)的 Drive 對象茵宪。該方法的語法格式為object.GetDrive drivespec,object是一個FSO對象的名稱瘦棋,drivespec用于指定驅(qū)動器的名稱稀火。
按F5運行上述代碼,按下TestDrive按鈕就會彈出一個消息框顯示C盤的信息赌朋。
(三)****Folder****對象
在FSO 對象模型中凰狞,提供了豐富的有關(guān)文件夾操作的方法篇裁,這些方法分別是:
? FileSystemObject對象中有關(guān)文件夾的方法:
CreateFolder :創(chuàng)建一個文件夾。
DeleteFolder:刪除一個文件夾赡若。
MoveFolder :移動一個文件夾达布。
CopyFolder:復(fù)制一個文件夾。
FolderExists:查找一個文件夾是否在驅(qū)動器上逾冬。
GetFolder :獲得已有Folder對象的一個實例黍聂。
GetParentFolderName:找出一個文件夾的父文件夾的名稱。
GetSpecialFolder:找出系統(tǒng)文件夾的路徑身腻。
? Folder對象的方法:
Delete :創(chuàng)建一個文件夾产还。
Move :移動一個文件夾。
Copy:復(fù)制一個文件夾嘀趟。
Name:檢索文件夾的名稱脐区。
在此需要強調(diào)一點,前面我們曾經(jīng)提到過FSO對象模型包含的方法是冗余的去件,所以Folder對象的Delete坡椒、Move、Copy方法和FileSystemObject對象的DeleteFolder尤溜、MoveFolder倔叼、CopyFolder方法實際上是相同的,因此在實際使用中可以任選其中的一種宫莱。
和Drive對象一樣丈攒,下面通過實例演示Folder對象的應(yīng)用。在VB下新建一個工程授霸,然后在上面添加三個命令按鈕巡验,然后在Form1的通用部分加入以下代碼:
Option Explicit
Dim fsoTest As New FileSystemObject
Dim folder1 As Folder
并且分別在三個命令按鈕的click事件輸入以下代碼:
Private Sub CmdCreate_Click()
Set folder1 = fsoTest.GetFolder(“C:") ' 獲取 Folder 對象。
fsoTest.CreateFolder (“C:\Test") '創(chuàng)建文件夾
MsgBox “folder C:\Test has created"
End Sub
Private Sub CmdDelete_Click()
Set folder1 = fsoTest.GetFolder(“C:") ' 獲取 Drive 對象碘耳。
fsoTest.DeleteFolder (“C:\Test") '刪除文件夾
MsgBox“folder C:\Test has deleted"
End Sub
Private Sub CmdGetPro_Click()
'獲取文件夾的有關(guān)信息
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指定了要創(chuàng)建的文件夾的名稱,而DeleteFolder方法的語法形式為object.DeleteFolder folderspec[,force]辛辨,其中捕捂,folderspec用來指定要刪除的文件夾的名稱,force是一個可選的布爾型參數(shù)斗搞,如果希望刪除只讀屬性的文件夾則將該值設(shè)為TRUE指攒,默認(rèn)為FALSE。
(四)****File****對象和****TextStream****對象
由于有關(guān)File對象的復(fù)制僻焚,刪除允悦,移動等操作和Folder對象類似,所以這部分內(nèi)容就不再重復(fù)虑啤。這里主要講述利用File對象和TextStream對象操作文本文件隙弛。
通常對文本文件的操作包括在文本文件中創(chuàng)建數(shù)據(jù)架馋,在文本文件中添加數(shù)據(jù),刪除文本文件的數(shù)據(jù)等操作驶鹉。這些操作都可以通過File對象和FileSystemObject對象的相關(guān)方法完成绩蜻。不過在使用之前,首先要創(chuàng)建一個文本文件室埋,這可以通過三種方法完成办绝。一種方法是使用FileSystemObject對象的 CreateTextFile 方法。要創(chuàng)建一個空文本文件姚淆,可以用以下語句:
Dim fsoTest As New FileSystemObject, fil1 As File
Set fil 1= fsoTest.CreateTextFile(“c:\testfile.txt", True)
第二種方法是使用 FileSystemObject 對象帶 ForWriting 標(biāo)志設(shè)置的 OpenTextFile 方法孕蝉,
Dim fsoTest As New FileSystemObject, ts1 As New TextStream
Set ts1 = fsoTest.OpenTextFile(“c:\testfile.txt", ForWriting)
第三種方法是使用File對象的帶 ForWriting 標(biāo)志設(shè)置的 OpenAsTextStream 方法:
Dim fsoTest As
--------------------------------------------
補:
[VBA]如何判斷一個文件或者文件夾是否存在,可以使用如下幾個函數(shù)來判斷
|
Function ExistsFile_UseFso(strPath As String) As Boolean
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
ExistsFile_UseFso = fso.FileExists(strPath)
Set fso = Nothing
End Function
|
|
PS: fso.FileExists(strPath),這個直接有返回值的腌逢。1和0
|