您好,登錄后才能下訂單哦!
VBS中FileSystemObject對象的作用是什么?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
FileSystemObject對象概述
FileSystemObject 對象的作用:提供對計算機文件系統的訪問,它允許我們在代碼內操作文本文件、文件夾及驅動器。FileSystemObject 對象提供一個屬性和一系列方法,可用它們來操縱 FileSystemObject 對象實現的一些從屬對象。這里提供了全部的內容概要,然后介紹每一個從屬對象。
一、FileSystemObject 對象的屬性
FileSystemObject 對象只有一個屬性,它用于得到當前機器上的所有有效驅動器的列表,如表1所示:
表1 FileSystemObject 對象的屬性和說明 | |
屬性 | 說明 |
Drivers | 返回本地計算機可用的驅動器列表 |
‘如下腳本就可以獲得FileSystemObject的Drivers屬性 Set objFSO = CreateObject ("Scripting.FileSystemObject") Set colDrivers = objFSO.Drivers
正如已經看到的,FileSystemObject 對象包含一個屬性——Drives,它返回一個包括本地計算機上所有可用驅動器的集合。
Drives 集合里的每個條目是一個 Drive 對象。Drive 對象的屬性如表2所示:
表2 Drive 對象的屬性及說明 | |
方法 | 說明 |
AvailableSpave | 考慮了帳戶定額和/或其他限制,返回驅動器上對于該用戶可用的空間的大小 |
DriveLetter | 返回驅動器的字母 |
DriveType | 返回驅動器的類型。返回值可以是 Unknown(0)、Removeable(1)、Fixed(2)、Network(3)、CDRom(4) 和 RamDisk(5)。然而需要注意的是當前版本的 scrrun.dll 不支持預定義常數 Network,必須使用十進制 3 來代替 |
FileSystem | 返回驅動器文件系統的類型。返回值包括“FAT”、“NTFS”和“CDFS” |
FreeSpace | 返回驅動器上可用剩余空間的總量 |
IsReady | 返回一個布爾值表明驅動器是否已準備好 |
Path | 返回一個由驅動器字母和冒號組成的驅動器路徑,即“C:” |
RootFolder | 返回代表的驅動器根目錄文件夾的 Folder 對象 |
SerialNumber | 返回一個用于識別磁盤卷的十進制的序列號 |
ShareName | 如果是一個網絡驅動器,返回該驅動器的網絡共享名 |
TotalSize | 返回驅動器的總容量(以字節為單位) |
VolumeName | 設定或返回本地驅動器卷名 |
因此,通過使用 Drives 集合里的 Drive 對象,可以在服務器上產生一個驅動器列表,與通過檢查每個可能的驅動器字母來判別驅動器是否存在的方法相比,效率更高。我們也可以得到關于該驅動器的信息。
示例:
' 創建FileSystemObject對象 Set objFSO = CreateObject("Scripting.FileSystemObject") ' 創建Drives集合,并賦值給colDrives Set colDrives = objFSO.Drives ' 遍歷Drives集合 For Each objDrive in colDrives '判斷驅動器是否已準備好 If objDrive.IsReady Then msg = "驅動器的名稱為:" & objDrive.DriveLetter & " " msg =msg & "驅動器文件系統的類型:" & objDrive.FileSystem &" " msg = msg & "驅動器的總容量:" & int(objDrive.TotalSize/(1024*1024*1024)) & "G " msg = msg & "剩余空間的總量:" & int(objDrive.FreeSpace/(1024*1024*1024)) & "G " End If Next reporter.ReportEvent micDone ,"遍歷Drives集合",msg
備注:在系統上運行這段程序以前有一點要注意。如果在 A 驅動器里沒有磁盤,或 CD-ROM 驅動器里沒有光盤,將得到一個錯誤提示:“Disk Not Ready”。除了 DriveLetter 屬性和 DriveType 屬性外,在使用其他屬性和方法前,通過檢查每個驅動器的 IsReady 屬性,可以保護該頁面。
二、FileSystemObject 對象的方法
1. 與驅動器有關的方法
表3 與驅動器有關的方法及說明 | |
方法 | 說明 |
DriveExists(drivespec) | 如果在 drivespec 中指定的驅動器存在,則返回 True,否則返回 False。drivespec 參數可以是一個驅動器字母,或者是文件、文件夾的完整絕對路徑 |
GetDrive(drivespec) | 返回 drivespec 指定的驅動器所對應的Drive對象。drivespec 可以包含冒號、路徑分隔符或者是網絡共享名,即:“C”、“C:”、“C:”及“/machinesharename” |
GetDriveName(drivespec) | 用字符串返回 drivespec 指定的驅動器的名稱。drivespec 參數必須是文件或文件夾的絕對路徑,或者僅僅是驅動器字母,例如:“c:”或“c” |
DriveExists的使用
方法名:DriveExists(drivespec)
說明:如果在 drivespec 中指定的驅動器存在,則返回 True,否則返回 False。drivespec 參數可以是一個驅動器字母,或者是文件、文件夾的完整絕對路徑
示例:
' 創建FileSystemObject對象 Set objFSO = CreateObject ("Scripting.FileSystemObject") For intCode = 65 To 90 'ANSI codes for 'A' to 'Z' strLetter = Chr(intCode) 'Chr:返回與指定的 ANSI 字符代碼相對應的字符。 If objFSO.DriveExists(strLetter) Then '判斷相應的盤符是否存在,如存在輸出 Reporter.ReportEvent micDone,"Show Drive”,” Found drive " & strLetter End If Next
另外,如果已知要訪問的驅動器、文件夾或文件。可以直接對其使用 GetDrive、GetFolder、GetSpecialFolder 和 GetFile 方法。
2. 與文件夾有關的方法及屬性
用FileSystemObject對象來操作文件夾的方法:
表4 與文件夾有關的方法及說明 | |
方法 | 說明 |
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 |
FolderExists(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(1) 和 TemporaryFolder(2) |
MoveFolder(source,destination) | 將 source 指定的一個或多個文件夾移動到 destination 指定的文件夾。在 source 里可以包含通配符,但在 destination 中不行。如果 source 包含通配符或 destination 末尾是路徑分隔符(‘'),則認為 destination 是要放置源文件夾的文件夾,否則認為它是一個新文件夾的完整路徑和名字。如果目的文件夾 destination 已經存在則產生錯誤 |
CopyFolder的使用
方法名:CopyFolder(source,destination,overwrite)
說明:將文件夾從某位置遞歸復制到另一位置。詳細說明請查看表4。
示例:
' 創建FileSystemObject對象 Set objfso = createobject("scripting.FileSystemObject") ' 將D:/test下所有的內容復制到c:/123 objfso.CopyFolder "D:/test","c:/123"
注:如果c:/123不存在,則QTP將自動創建它
CreateFolder及DeleteFolder的使用
方法名:CreateFolder(foldername)/DeleteFolder(folderspec,force)
說明:創建/刪除一個路徑名為 foldername 的文件夾。詳細說明請查看表4。
示例:
' 創建FileSystemObject對象 Set objfso = createobject("scripting.FileSystemObject") ‘ 在c:/創建new folder文件夾,如果文件夾存在,則會出現錯誤提示 objfso.CreateFolder("c:/new folder") ‘ 刪除c:/new folder文件夾 objfso.DeleteFolder("c:/new folder")
注:DeleteFolder無論文件夾是否包含內容,都將刪除該文件夾
FolderExists的使用
方法名:FolderExist(folderspec)
說明:如果指定的文件夾存在,則返回 True;否則返回 False。詳細說明請查看表4。
示例:
Function hanshu(strpath) Dim objfso,objset ‘ 創建FileSystemObjec對象 Set objfso = CreateObject("Scripting.FileSystemObject") ‘ 判斷在指定的路徑中是否有 If Not objfso.FolderExists(strpath) Then objset = objfso.CreateFolder(strpath) else objset = objfso.DeleteFolder(strpath) End If hanshu = objset End Function hanshu("c:/new folder")
GetAbsolutePathName的使用
方法名:GetAbsolutePathName(pathspec)
說明:從提供的指定路徑中返回完整且含義明確的路徑。詳細說明請查看表4。
示例:
Dim objfso ‘創建FileSystemObject對象 Set objfso = createobject("Scripting.FileSystemObject") ‘返回當前的目錄,下面兩條語句返回一樣的結果 msgbox (objfso.GetAbsolutePathName("")) msgbox (objfso.GetAbsolutePathName("C:"))
GetFolder的使用
方法名:GetFolder(folderspec)
說明:返回與指定的路徑中某文件夾相應的 Folder 對象。可以根據所返回的Folder 對象,再去訪問該Folder 對象所持有的屬性。
示例:
Dim objfso,objset '創建FileSystemObject對象 Set objfso = createobject("Scripting.FileSystemObject") '返回C:/testing的Folder的對象 Set objset = objfso.GetFolder("C:/testing") ' 根據所返回的Folder對象,去訪問其相關的屬性 reporter.ReportEvent micDone ,"Folder對象的相關屬性","文件夾創建的日期:" & objset.DateCreated &"; 文件夾所在的驅動:" & objset.Drive & "; 文件夾的名字:" & objset.Name
注:關于Folder對象的屬性,將在下面會詳細介紹
GetParentFolderName的使用
方法名:GetParentFolderName(pathspec)
說明:返回字符串,該字符串包含指定的路徑中最后一個文件或文件夾的父文件夾。
示例:
Dim objfso '創建FileSystemObject對象 Set objfso = createobject("Scripting.filesystemobject") '使用GetParentFolderName方法來返回上一層文件夾 msgbox (objfso.GetParentFolderName("C:/WINDOWS/addins"))
GetSpecialFolder的使用
方法名:GetSpecialFolder(folderspec)
說明:返回指定的特殊文件夾。詳細說明請查看表4。
示例:
Dim fso,tempName Set fso = CreateObject("Scripting.FileSystemObject") 'GetSpecialFolder()中的參數2,返回一個名為Temp的臨時文件夾 Set tempName = fso.GetSpecialFolder(2) msgbox tempName
MoveFolder的使用
方法名:MoveFolder(source,destination)
說明:將一個或多個文件夾從某位置移動到另一位置。詳細說明請查看表4。
示例:
Dim sourcepath,destination sourcepath = "C:/testing" destination = "C:/123" '調用MoveFolders方法 call MoveFolders(sourcepath,destination) Sub MoveFolders(sourcepath,destination) Dim fso '創建FileSystemObject對象 Set fso = CreateObject("Scripting.FileSystemObject") '使用MoveFolder方法,將testing文件夾的內容移動到123文件夾下 fso.MoveFolder sourcepath,destination End Sub
注:如果腳本在運行前文件夾123已存在,則運行是會發生錯誤;在不同的磁盤下MoveFolder方法不能用
上面提到的Folder方法是基于FileSystemObject 對象的,現在我們來看看基于Folder對象的方法。
Folder對象所提供的方法
Folder 對象提供一組可用于復制、刪除和移動當前文件夾的方法。這些方法的運行方式與 FileSystemObject 對象的CopyFolder、DeleFolder 和 MoveFolder 方法相同,但這些方法不要求 source 參數,因為源文件就是這個文件夾。
備注:CopyFolder、DeleFolder等方法是基于FileSystemObject 對象的;而下面的Copy、Delete等方法是基于FileSystemObject對象下的Folder對象,他們實現的功能是類似的。
表5 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 |
Copy的使用
方法名:Copy(destination,overwrite)
說明:將文件夾的所有內容,復制到destination文件夾中。詳細說明請見表5
示例:
Dim sourcepath sourcepath = "C:/testing" Call FolderAttributes(sourcepath) Sub FolderAttributes(sourcepath) Dim fso,objset Set fso = CreateObject("Scripting.FileSystemObject") '使用GetFolder方法來返回Folder對象 Set objset = fso.getFolder(sourcepath) '將testing中的所有內容復制到123文件夾中 objset.Copy("d:/123") End Sub
備注:如果目標文件夾不存在,則腳本在運行是將自動創建
Delete的使用
方法名:Delete(force)
說明:刪除文件夾及里面的所有內容。詳細說明請見表5
示例:
Dim sourcepath sourcepath = "C:/testing" Call FolderAttributes(sourcepath) Sub FolderAttributes(sourcepath) Dim fso,objset Set fso = CreateObject("Scripting.FileSystemObject") '使用GetFolder方法來返回Folder對象 Set objset = fso.getFolder(sourcepath) '將testingw文件夾及文件夾里所有的內容全部刪除 objset.Delete(True) End Sub
備注:如果文件夾屬性為只讀且Delete的參數為False,則腳本在運行是將提示“沒有權限”;當文件夾不存在時,將提示“路徑未找到”。
Move的使用
方法名:Move(destination)
說明:將文件夾及里面所有的內容移動到 destination 指定的文件夾。詳細說明請見表5
示例:
Dim sourcepath sourcepath = "C:/testing" Call FolderAttributes(sourcepath) Sub FolderAttributes(sourcepath) Dim fso,objset Set fso = CreateObject("Scripting.FileSystemObject") '使用GetFolder方法來返回Folder對象 Set objset = fso.getFolder(sourcepath) '使用Move()將testing文件夾及里面所有的內容,移動到目標文件夾123中 objset.Move("C:/123") End Sub
備注:如果目標文件夾123已存在,則腳本運行時提示“文件已存在”;如果目標文件夾123在D:/,則腳本運行使提示“沒有權限”
CreateTextFile的使用
方法名:CreateTextFile(filename,overwrite,unicode)
說明:創建指定文件并返回 TextStream 對象,該對象可用于讀或寫創建的文件。詳細說明請見表5。
示例:
Dim sourcepath sourcepath = "C:/testing" Call FolderAttributes(sourcepath) Sub FolderAttributes(sourcepath) Dim fso,objset Set fso = CreateObject("Scripting.FileSystemObject") '使用GetFolder方法來返回Folder對象 Set objset = fso.getFolder(sourcepath) '在testing文件夾下,使用CreateTextFile()創建myClass2.doc文件 objset.CreateTextFile "myClass2.doc",true End Sub
備注:CreateTextFile()所創建的文件類型是根據所提供的擴展名來確定的,如也可以寫成myClass2.txt、myClass.exe等等;FileSystemObject對象也可以調用CreateTextFile(),我們可以將上面的代碼改寫成:
fso.CreateTextFile “C:/testing/myClass.doc”,true
Folder對象所提供的屬性:
表6 Folder 對象的屬性及說明 | |
屬性 | 說明 |
Attributes | 返回文件夾的屬性。可以是下列值中的一個或其組合:Normal(0)、ReadOnly(1)、Hidden(2)、System(4)、Volume(名稱)(8)、Directory(文件夾)(16)、Archive(32)、Alias(64) 和 Compressed(128)。例如,一個隱藏的只讀文件,Attributes 的值為 3 |
DateCreated | 返回該文件夾的創建日期和時間 |
DateLastAccessed | 返回最后一次訪問該文件夾的日期和時間 |
DateLastModified | 返回最后一次修改該文件夾的日期和時間 |
Drive | 返回該文件夾所在的驅動器的驅動器字母 |
Files | 返回 Folder 對象包含的 Files 集合,表示該文件夾內所有的文件 |
IsRootFolder | 返回一個布爾值說明該文件夾是否是當前驅動器的根文件夾 |
Name | 設定或返回文件夾的名字 |
ParentFolder | 返回該文件夾的父文件夾對應的 Folder 對象 |
Path | 返回文件夾的絕對路徑,使用相應的長文件名 |
ShortName | 返回 DOS 風格的 8.3 形式的文件夾名 |
ShortPath | 返回 DOS 風格的 8.3 形式的文件夾的絕對路徑 |
Size | 返回包含在該文件夾里所有文件和子文件夾的大小 |
SubFolers | 返回該文件夾內包含的所有子文件夾對應的 Folders 集合,包括隱藏文件夾和系統文件夾 |
Type | 如果可能,返回一個文件夾的說明字符串(例如,“Recycle Bin”) |
如上面提到的,我們可以使用下面的腳本來訪問Folder對象
Dim objfso,objset '創建FileSystemObject對象 Set objfso = createobject("Scripting.FileSystemObject") '返回C:/testing的Folder的對象 Set objset = objfso.GetFolder("C:/testing")
注:通過Folder對象我們就可以訪問其提供的方法及屬性
Drive、DateCreated、Name屬性的使用
示例:
Dim sourcepath sourcepath = "C:/testing" Call FolderAttributes(sourcepath) Sub FolderAttributes(sourcepath) Dim fso,objset Set fso = CreateObject("Scripting.FileSystemObject") '使用GetFolder方法來返回Folder對象 Set objset = fso.getFolder(sourcepath) '通過Folder對象來訪問Folder屬性 reporter.ReportEvent micDone ,"測試Folder屬性","文件夾所在的磁盤為:" & objset.Drive & " 文件夾所創建的日期:" & objset.DateCreated & " 文件夾的名字為:" & objset.Name End Sub
SubFolers屬性的使用
示例:
Dim sourcepath sourcepath = "C:/Program Files/Common Files" Call FolderAttributes(sourcepath) Sub FolderAttributes(sourcepath) Dim fso,objset,objFolders,FolderName,i i = 0 Set fso = CreateObject("Scripting.FileSystemObject") '使用GetFolder方法來返回Folder對象 Set objset = fso.getFolder(sourcepath) 'SubFolders屬性將返回所有子文件夾對應的Folder集合 Set objFolders = objset.SubFolders '遍歷Folder集合,統計出共有多少個文件夾,及相關文件夾的名字 For Each objFolder in objFolders i = i +1 'vbcr為換行符 FolderName = FolderName + objFolder.Name + vbcr Next msgbox ("共有" & i &"個文件夾,文件夾的名字為:" & FolderName) End Sub
Files屬性的使用
示例:
Dim objFso,objGetFolder,intCount,strFileName intCount = 0 '創建FileSystemObject對象 Set objFso= CreateObject("Scripting.FileSystemObject") '使用GetFolder()獲得文件夾對象 Set objGetFolder = objFso.GetFolder("C:/test") '遍歷Files集合并顯示文件夾中所有的文件名 For Each strFile in objGetFolder.Files intCount = intCount + 1 strFileName =strFileName & "第" & intCount & "個文件夾名為:" & strFile.Name & vbcr Next msgbox strFileName
3. 以文件有關的方法及屬性
用FileSystemObject對象來操作文件的方法:
表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(1)(缺省)、ForWriting(2)、ForAppending(8)。當寫入或追加到一個不存在的文件時,如果 create 參數設置為 true,就將創建一個新文件。缺省的 create 參數是 False。format 參數說明對文件讀或寫的數據格式。允許數值是:TristatetFalse(0)(缺省),按照 ASCII 格式打開;TristatetTrue(-1),按照 Unicode 格式打開;TristateDefault(-2),用系統缺省格式打開 |
CopyFile及MoveFile的使用
方法名:CopyFile(source,destination,overwrite)
說明:將一個或多個文件從某位置復制到另一位置。詳細說明請見表7
方法名:MoveFile(source,destination)
說明:將 source 指定的一個或多個源文件移動到 destination 指定的目的文件夾。
示例:
Dim sourcepath,targetpath sourcepath = "C:/testing/*.txt" targetpath = "C:/123/" Call FolderAttributes(sourcepath,targetpath) Sub FolderAttributes(sourcepath,targetpath) Dim fso Set fso = CreateObject("Scripting.FileSystemObject") '將testing文件夾下所有擴展名名為.txt的文件,復制到123文件夾下 fso.CopyFile sourcepath,targetpath fso.MoveFile sourcepath,targetpath End Sub
備注:如果C:/123文件夾不存在,則腳本運行時提示“路徑不存在”
CreateTextFile及DeleteFile的使用
方法名:CreateTextFile(filename,overwrite,unicode)
說明:創建指定文件并返回 TextStream 對象,該對象可用于讀或寫創建的文件。
方法名:DeleFile(filespec,force)
說明:刪除指定的文件。詳細說明請見表7.
示例:
Dim sourcepath sourcepath = "C:/testing/ myClass2.doc " Call FolderAttributes(sourcepath) Sub FolderAttributes(sourcepath) Dim fso Set fso = CreateObject("Scripting.FileSystemObject") '在testing文件夾下,使用CreateTextFile()創建myClass2.doc文件 fso.CreateTextFile sourcepath,true '刪除testing文件夾下,所有擴展名為.txt的文件 fso.DeleteFile sourcepath,true End Sub
備注:如果所刪除的文件為只讀屬性且DeleteFile()的參數為false的話,則腳本運行是出現“沒有權限”FileExists的使用
方法名:FileExists(filespec)
說明:判斷所指定的文件是否存在。此方法將返回Bool值. 詳細說明請見表7.
示例:
Dim sourcepath sourcepath = "C:/testing/test.txt" Call FolderAttributes(sourcepath) Sub FolderAttributes(sourcepath) Dim fso Set fso = CreateObject("Scripting.FileSystemObject") '判斷C:/testing/test.txt是否有存在,如果存在返回“true”;否則返回“false” If fso.FileExists(sourcepath) Then msgbox "true" else msgbox "false" End If End Sub
GetBaseName、GetFileName及GetExtensionName的使用
方法名:GetBaseName(filespec)
說明:返回字符串,文件 (不帶擴展名), 或者提供的路徑說明中的文件夾。
方法名:GetExtensionName(filespec)
說明:返回字符串,該字符串包含路徑最后一個組成部分的擴展名。
方法名:GetFileName(pathspec)
說明:返回指定路徑(不是指定驅動器路徑部分)的最后一個文件或文件夾。
示例:
Dim sourcepath sourcepath = "C:/testing/test.txt" Call FolderAttributes(sourcepath) Sub FolderAttributes(sourcepath) Dim fso Set fso = CreateObject("Scripting.FileSystemObject") '返回文件名test, 擴展名 txt, 文件名+擴展名 test.txt Msgbox (fso.GetBaseName(sourcepath)) Msgbox (fso. GetExtensionName(sourcepath)) Msgbox (fso.GetFileName(sourcepath)) End Sub
GetFile的使用
方法名:GetFile(filespec)
說明:返回與指定路徑中某文件相應的 File 對象,既而可以訪問到File的屬性。
示例:
Dim sourcepath sourcepath = "C:/testing/778899.txt" Call FolderAttributes(sourcepath) Sub FolderAttributes(sourcepath) Dim fso,objFile Set fso = CreateObject("Scripting.FileSystemObject") '調用GetFile()返回File對象,通過File對象來訪問其下的屬性 set objFile = fso.GetFile(sourcepath) reporter.ReportEvent micDone,"訪問file的屬性","該文件所在的盤符為:" & objFile.Drive & " 文件名為:" & objFile.Name End Sub
注:關于File對象的屬性,將在下面會詳細介紹
GetTempName的使用
方法名:GetTempName()
說明:返回隨機生成的臨時文件或文件夾的名稱,用于執行要求臨時文件或文件夾的操作
示例:
Dim fso, tempfile '創建FileSystemObject對象 Set fso = CreateObject("Scripting.FileSystemObject") '調用CreateTempFile函數,并將對象賦值給tempfile Set tempfile = CreateTempFile '在臨時文件中寫入字符 tempfile.WriteLine "世界你好" '關閉對象 tempfile.Close Function CreateTempFile Dim tfolder, tname, tfile Const TemporaryFolder = 2 'GetSpecialFolder()中的參數2,返回一個名為Temp的臨時文件夾 Set tfolder = fso.GetSpecialFolder(TemporaryFolder) '隨機生成一個臨時文件名 tname = fso.GetTempName '在Temp臨時文件夾下面,創建一個臨時文件 Set tfile = tfolder.CreateTextFile(tname) '將結果賦值給函數 Set CreateTempFile = tfile End Function
備注:GetTempName 方法不創建文件,該方法僅提供臨時文件名。示例中的的結果,默認保存在C:/Documents and Settings/Administrator/Local Settings/Temp
OpenTextFile的使用
方法名:(filename,iomode,create,format)
說明:打開指定的文件并返回一個 TextStream 對象,可以讀取、寫入此對象或將其追加到文件。詳細的說明見表7.
示例:
Dim spec spec = "C:/testing.txt" '三個參數的分別為:以只讀模式打開文件、以只寫方式打開文件、打開文件并在文件末尾進行寫操作 Const intForReading = 1,intForWriting = 2,intForAppending = 8 '調用OpenTextFileTest() Call OpenTextFileTest(spec,intForAppending) Sub OpenTextFileTest(sepc,intForAppending) Dim fso,objTStream '創建FileSystemObject對象 Set fso = CreateObject("Scripting.FileSystemObject") '參數true表示:如果文件不存在,則創建文件。最后OpenTextFile()將返回TextStream對象 Set objTStream = fso.OpenTextFile(sepc,intForAppending,true) '利用TextStream對象來將字符串寫入文件 objTStream.write "hello word!" '釋放TextStream對象 objTStream.close End Sub
File對象所提供的屬性
表8 File 對象的屬性及說明 | |
屬性 | 說明 |
Attributes | 返回文件的屬性。可以是下列值中的一個或其組合:Normal(0)、ReadOnly(1)、Hidden(2)、System(4)、Volume(名稱)(9)、Directory(文件夾)(16)、Archive(32)、Alias(64) 和 Compressed(128) |
DateCreated | 返回該文件夾的創建日期和時間 |
DateLastAccessed | 返回最后一次訪問該文件的日期和時間 |
DateLastModified | 返回最后一次修改該文件的日期和時間 |
Drive | 返回該文件所在的驅動器的 Drive 對象 |
Name | 設定或返回文件的名字 |
ParentFolder | 返回該文件的父文件夾的 Folder 對象 |
Path | 返回文件的絕對路徑,可使用長文件名 |
ShortName | 返回 DOS 風格的 8.3 形式的文件名 |
ShortPath | 返回 DOS 風格的 8.3 形式的文件絕對路徑 |
Size | 返回該文件的大小(字節) |
Type | 如果可能,返回一個文件類型的說明字符串(例如:“Text Document”表示 .txt 文件) |
我們在前面File對象的方法中曾提到,可以使用FileSystemObject對象的GetFile()來訪問File對象屬性。
訪問File對象屬性的示例如下:
Dim sourcepath sourcepath = "C:/testing/778899.txt" Call FolderAttributes(sourcepath) Sub FolderAttributes(sourcepath) Dim fso,objFile Set fso = CreateObject("Scripting.FileSystemObject") '調用GetFile()返回File對象,通過File對象來訪問其下的屬性 set objFile = fso.GetFile(sourcepath) reporter.ReportEvent micDone,"訪問file的屬性","該文件所在的盤符為:" & objFile.Drive & " 文件名為:" & objFile.Name End Sub
備注:File對象屬性的使用方法和前面介紹的Folder對象屬性的使用方法一樣,所以在這不一一列出。
TextStream對象概述
TextStream對象是用于訪問文本文件的對象,它是FileSystemObject一個獨立的附屬對象,但在使用TextStream對象時,我們仍要借助FileSystemObject 對象或其附屬對象來創建一個 TextStream 對象并訪問磁盤文件的內容。可以通過FileSystemObject 對象的CreateTextFile()及OpenTextFile(),來獲取TextStream的對象句柄。
下面我們來具體的看看TextStream 對象的方法及屬性的使用。
一、TextStream對象的方法
表9 TextStream 對象的方法及說明 | |
方法 | 說明 |
Close() | 關閉一個打開的文件 |
Read(numchars) | 從文件中讀出 numchars 個字符 |
ReadAll() | 作為單個字符串讀出整個文件 |
ReadLine() | 作為一個字符串從文件中讀出一行(直到回車符和換行) |
Skip(numchars) | 當從文件讀出時忽略 numchars 個字符 |
SkipLine() | 當從文件讀出時忽略下一行 |
Write(string) | 向文件寫入字符串 string |
WriteLine(string) | 向文件寫入字符串 string(可選)和換行符 |
WriteBlankLines(n) | 向文件寫入 n 個換行符 |
Close、Write、WriteLine及WriteBlankLines的使用
方法名:Close()
說明:關閉正在打開的文件
方法名:WriteLine(string)
說明:向文件寫入字符串 string(可選)和換行符。
示例:
Dim strPath,strText strPath = "C:/testing.txt" strText = "This is Test !" & vbCrLf & “hello word !” '調用函數 Call CreateFile(strPath,strText) Sub CreateFile(strPath,strText) Dim objFso,objStream '創建FileSystemObject對象 Set objFso = CreateObject("Scripting.FileSystemObject") '使用FileSystemObject對象的CreateTextFile(),來返回一個TextStream對象句柄 Set objStream = objFso.CreateTextFile(strPath,True) '三個Write的意思分別為:在文本中寫入字符、寫入帶換行符的字符、寫入3個換行符 objStream.Write(strText) ‘objStream.WriteLine(strText) ‘objStream. WriteBlankLines 3 '關閉TextStream對象 objStream.Close End Sub
Read、ReadAll及ReadLine的使用
方法名:Read(numchars)
說明:從 TextStream 文件中讀入指定數目的字符并返回結果字符串。
方法名:ReadAll()
說明:讀入全部 TextStream 文件并返回結果字符串。
方法名:ReadLine()
說明:從 TextStream 文件中讀入一整行字符(直到下一行,但不包括下一行字符),并返回結果字符串。
示例:
Sub CreateFile(strPath,strText) Dim objFso,objStream '創建FileSystemObject對象 Set objFso = CreateObject("Scripting.FileSystemObject") '使用FileSystemObject對象的CreateTextFile(),來返回一個TextStream對象句柄 Set objStream = objFso.CreateTextFile(strPath,True) '寫入字符 objStream.WriteLine(strText) Set objStream = objFso.OpenTextFile(strPath,1,true) msgbox (objStream.ReadLine) 'msgbox (objStream.ReadAll) ' msgbox (objStream.Read(Len(strText))) '關閉TextStream對象 objStream.Close End Sub
Skip、SkipLine的使用
方法名:Skip(numchars)
說明:讀取 TextStream 文件時跳過指定數目的字符
方法名:SkipLine()
說明:當讀到 TextStream 文件時,跳過下一行。
示例:
Dim strPath,strText strPath = "C:/testing.txt" '調用函數 Call CreateFile(strPath) Sub CreateFile(strPath) Dim objFso,objStream '創建FileSystemObject對象 Set objFso = CreateObject("Scripting.FileSystemObject") '使用FileSystemObject對象的CreateTextFile(),來返回一個TextStream對象句柄 Set objStream = objFso.CreateTextFile(strPath,True) '在文本中寫入字符 objStream.Write "This is Test !" & vbCrLf & "hello word !" '以只讀的方式打開文件 Set objStream = objFso.OpenTextFile(strPath,1,true) '讀取文件時跳過5個字符;或者跳過當前行,讀取下一行 objStream.Skip(5) 'objStream.SkipLine '讀取文本內容 msgbox objStream.ReadAll '關閉TextStream對象 objStream.Close End Sub
備注:兩者的區別是:Skip——跳過指定的幾個字符;SkipLine——跳過一行
二、TextStream對象的屬性
TextStream 的屬性提供有關文件內文件指針當前位置的信息,如表9所示。注意,所有的屬性是只讀的。
表10 TextStream 對象的屬性及說明 | |
屬性 | 說明 |
AtEndOfLine | 如果文件位置指針在文件中一行的末尾則返回 True |
AtEndOfStream | 如果文件位置指針在文件的末尾則返回 True |
Column | 從 1 開始返回文件中當前字符的列號 |
Line | 從 1 開始返回文件中當前行的行號” |
AtEndOfLine 和 AtEndOfStream 屬性僅對以 iomode 參數為 ForReading 的方式打開的文件可用,否則將會出錯。
AtEndOfLine及AtEndOfStream的使用
示例:
Dim strPath,strText strPath = "C:/testing.txt" '調用函數 Call CreateFile(strPath) Sub CreateFile(strPath) Dim objFso,objStream,str '創建FileSystemObject對象 Set objFso = CreateObject("Scripting.FileSystemObject") '以只讀的方式打開文件,如果文件不存在則創建它 Set objStream = objFso.OpenTextFile(strPath,1,true) '如果當前的指針不在行末,則讀取文本內容 Do While objStream.AtEndOfLine <> true ‘Do While objStream.AtEndOfStream <> true str = str + objStream.Read(1) Loop msgbox str '關閉TextStream對象 objStream.Close End Sub
備注:兩者間的區別是:AtEndOfLine——讀取到當前文本行的末尾;AtEndOfStream——讀取到整個文本的末尾
Column及Line的使用
示例:
Sub TestTextStream(strPath) Dim objFso,objTStream,str Set objFso = CreateObject("Scripting.FileSystemObject") '以只讀的方式打開文件 Set objTStream = objFso.OpenTextFile(strPath,1) '如果當前的指針不在整個文檔的末尾,讀取文本的所有內容 Do While objTStream.AtEndOfStream <> true objTStream.ReadAll str = str + "共有" & objTStream.Line & "行數據,光標最后所在列號為:" & objTStream.Column & vbCrLf Loop '打印信息 print str End Sub
以下是補充資料:
FSO包含的常見對象有:
對象/集合 | 描述 |
Drive | 包含儲存設備的信息,包括硬盤、光驅、ram盤、網絡驅動器 |
Drives | 提供一個物理和邏輯驅動器的列表 |
File | 檢查和處理文件 |
Files | 提供包含在文件夾內的所有文件的列表 |
Folder | 檢查和處理文件夾 |
Folders | 提供在 Folder 內的所有文件夾的列表 |
TextStream | 對象。用來讀寫文本文件。 |
用FSO對象模型來編程,使用CreateObject方法來創建FileSystemObject對象,例如:
Dim fso
Set fso = wscript.createobject("scripting.filesystemobject")
在這個示例中,Scripting 是類型庫的名字,而 FileSystemObject 則是想要創建的對象的名字。至此我們獲取了fso對象,接下來就可以使用fso對象了。如果要釋放的話也很簡單,例如:
Set fso = nothing
FileSystemObject對象總共一個屬性即Drives
描述:獲得所有可用驅動器的集合。
說明:無論是否本地磁盤、插入媒體、可移動媒體驅動器都顯示在 Drives 集合中。
具體示例代碼如下所示:獲取本計算機上所有的磁盤的盤符
Set fso = CreateObject("Scripting.FileSystemObject") Set Drivers = fso.Drives For Each Driver in Drivers Msgbox Driver.DriveLetter '輸出計算機上所有的磁盤盤符 Next
方法:(僅常用的方法)
CreateFile
描述:創建一個空文件
語法:object. CreateTextFile(strFile,blnOverWrite)
參數:strFile為文件名稱
blnOverWrite為Ture強制覆蓋,為False不覆蓋
示例:創建文件C:\test.txt
Dim Fso '創建FileSystemObject對象 Set Fso = CreateObject("Scripting.FileSystemObject") '使用CreateTextFile創建文件,不覆蓋存在的文件 Fso.CreateTextFile "C:\test.txt",False '覆蓋存在的文件 Fso.CreateTextFile "C:\test.txt",True
CreateFolder
描述:創建一個空的文件夾
語法:object. CreateFolder(strFolder)
參數:strFolder為想要創建的文件夾名稱
示例:創建文件夾: c:\test
Dim Fso '創建FileSystemObject對象 Set Fso = CreateObject("Scripting.FileSystemObject") '使用MyFolder創建文件夾 Fso.CreateFolder("c:\test")
DeleteFile
描述:刪除一個文件
語法:object. DeleteFile (strFile,force)
參數:strFile為想要刪除的文件。組成部分中可用通配符。
force如果要刪除只讀文件,則該值為 True;否則為 False(默認)
示例:刪除文件: c:\test.txt
Dim Fso '創建FileSystemObject對象 Set Fso = CreateObject("Scripting.FileSystemObject") '使用DeleteFile刪除指定文件 Fso.DeleteFile("c:\test.txt") '強制刪除只讀的文件 Fso.DeleteFile "c:\test.txt",True
DeleteFolder
描述:刪除一個文件夾
語法:object. DeleteFolder(strFolder,force)
參數:strFolder為想要刪除的文件夾名稱。組成部分中可用通配符。
force如果要刪除只讀文件夾,則該值為 True;否則為 False(默認)
示例:刪除文件夾: c:\test
Dim Fso '創建FileSystemObject對象 Set Fso = CreateObject("Scripting.FileSystemObject") '使用DeleteFile刪除指定文件 Fso.DeleteFolder("c:\test") '強制刪除只讀的文件 Fso.DeleteFolder "c:\test",True
FileExists
描述:判斷指定文件是否存在
語法:object. FileExists (strFile)
參數:strFile為指定的文件
示例:檢查文件: c:\test.txt是否存在
Dim Fso '創建FileSystemObject對象 Set Fso = CreateObject("Scripting.FileSystemObject") '使用FileExists判斷指定文件是否存在 MsgBox Fso.FileExists("c:\test.txt")
FolderExist
描述:判斷指定文件夾是否存在
語法:object. FolderExists (strFolder)
參數:strFolder為指定的文件夾
示例:檢查文件夾: c:\test是否存在
Dim Fso '創建FileSystemObject對象 Set Fso = CreateObject("Scripting.FileSystemObject") '使用FolderExists判斷指定文件夾是否存在 MsgBox Fso.FolderExists("c:\test")
CopyFile
描述:將一個或多個文件從某位置復制到另一位置
語法:object.CopyFile "source", "destination"[, overwrite]
參數:source必選項。表示指定文件的路徑。組成部分中可用通配符。
destination必選項。表示目標位置路徑
overwrite可選項。Boolean 值表明是否覆蓋現有文件。如果是 True,則覆蓋文件;如果是 False,則不覆蓋現有文件。默認值是 True
示例:將 c:\test.txt文件復制到D:\下
Dim Fso '創建FileSystemObject對象 Set Fso = CreateObject("Scripting.FileSystemObject") '使用CopyFile復制文件到另一個位置,False不覆蓋已存在文件 Fso.CopyFile "c:\test.txt","D:\",False 'True覆蓋已存在文件 Fso.CopyFile "c:\test.txt","D:\",True
示例:將 c:\下所有的txt文件復制到D:\下
Dim Fso '創建FileSystemObject對象 Set Fso = CreateObject("Scripting.FileSystemObject") '使用*.txt,可以同時將多個文件復制到另一個位置,False不覆蓋已存在文件 Fso.CopyFile "c:\*.txt","D:\",False 'True表示覆蓋已存在文件 Fso.CopyFile "c:\*.txt","D:\",True
CopyFolder
描述:將文件夾從某位置復制到另一位置
語法:object. CopyFolder "source", "destination"[, overwrite]
參數:source必選項。表示指定文件夾的路徑。組成部分中可用通配符。
destination必選項。表示目標位置的路徑
overwrite可選項。Boolean 值表明是否覆蓋現有文件夾。
如果是 True,則覆蓋文件夾;如果是 False,則不覆蓋現有文件夾。默認值是 True
示例:將 c:\test文件夾復制到D:\下
Dim Fso '創建FileSystemObject對象 Set Fso = CreateObject("Scripting.FileSystemObject") '使用CopyFile復制文件到另一個位置,默認為True覆蓋已存在文件 Fso.CopyFolder "c:\test","D:\" 'False不覆蓋已存在文件 Fso.CopyFolder "c:\test","D:\",False
MoveFile
描述:將一個或多個文件從某位置移動到另一位置
語法:object.MoveFile source, destination
參數:source必選項。要移動的文件的路徑。組成部分中可用通配符。
destination必選項。指定路徑,表示要將文件移動到該目標位置。
destination 參數不能包含通配符。
示例:將 c:\test文件夾移動到D:\下
Dim Fso '創建FileSystemObject對象 Set Fso = CreateObject("Scripting.FileSystemObject") '使用MoveFile移動文件到另一個位置 Fso.MoveFile "c:\test.txt","D:\"
MoveFolder
描述:將一個或多個文件夾從某位置移動到另一位置
語法:object.MoveFolder source, destination
參數:source必選項。要移動的文件夾的路徑。組成部分中可用通配符。
destination必選項。指定路徑,表示要將文件夾移動到該目標位置。
示例:
Dim Fso '創建FileSystemObject對象 Set Fso = CreateObject("Scripting.FileSystemObject") '使用MoveFolder移動文件夾到另一個位置 Fso.MoveFolder "c:\test","D:\"
GetExtensionName
描述:獲取文件后綴名
語法:object.MoveFolder source, destination
參數:source必選項。要移動的文件夾的路徑。組成部分中可用通配符。
destination必選項。指定路徑,表示要將文件夾移動到該目標位置。
示例:獲取”c:\test.txt”文件后綴名
Dim Fso Dim GetExtensionName '創建FileSystemObject對象 Set Fso = CreateObject("Scripting.FileSystemObject") '使用GetExtensionName獲取文件后綴名 GetExtensionName = fso.GetExtensionName("c:\test.txt") MsgBox GetExtensionName '輸出txt
GetBaseName
描述:獲取文件當前所在文件夾
語法:object.GetBaseName Path
參數:Path必選項。文件路徑名。
示例:獲取”c:\test.txt”文件名稱
Dim Fso Dim GetBaseName '創建FileSystemObject對象 Set Fso = CreateObject("Scripting.FileSystemObject") '使用GetBaseName獲取文件的文件名稱 GetBaseName = Fso.GetBaseName("c:\test\test.txt") MsgBox GetBaseName '輸出test
GetParentFolderName
描述:將一個或多個文件夾從某位置移動到另一位置
語法:object.GetParentFolderName Path
參數:Path必選項。文件路徑名。
示例:獲取”c:\test.txt”文件所在的文件夾
Dim Fso Dim GetParentFolderName '創建FileSystemObject對象 Set Fso = CreateObject("Scripting.FileSystemObject") '使用GetParentFolderName獲取文件當前所在的文件夾 GetParentFolderName = Fso.GetParentFolderName("c:\test\test.txt") MsgBox GetParentFolderName '輸出c:\test
關于VBS中FileSystemObject對象的作用是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。