1. 程式人生 > 其它 >VBS指令碼程式設計(7)——檔案與資料夾的操作

VBS指令碼程式設計(7)——檔案與資料夾的操作

FileSystemObject 物件

FileSystemObject物件的作用:提供對計算機檔案系統的訪問,它允許我們在程式碼內操作文字檔案、資料夾及驅動器。FileSystemObject物件提供一個屬性和一系列方法,可用它們來操縱FileSystemObject物件實現的一些從屬物件。這裡提供了全部的內容概要,然後介紹每一個從屬物件。

FileSystemObject物件的屬性

FileSystemObject物件只有一個屬性,它用於得到當前機器上的所有有效驅動器的列表,如表1所示:
表1 FileSystemObject物件的屬性和說明
屬性 說明
Drivers
返回本地計算機可用的驅動器列表
‘如下指令碼就可以獲得FileSystemObject的Drivers屬性 Set objFSO = CreateObject ("Scripting.FileSystemObject") Set colDrivers = objFSO.Drivers 正如已經看到的,FileSystemObject 物件包含一個屬性——Drives,它返回一個包括本地計算機上所有可用驅動器的集合。
方法 說明
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 &  VBCrlf
msg =msg & "驅動器檔案系統的型別:" & objDrive.FileSystem & VBCrlf
msg = msg & "驅動器的總容量:" & int(objDrive.TotalSize/(1024*1024*1024)) & "G "& VBCrlf
msg = msg & "剩餘空間的總量:" & int(objDrive.FreeSpace/(1024*1024*1024)) & "G  "
       End If
Next
msgbox msg
備註:在系統上執行這段程式以前有一點要注意。如果在A驅動器裡沒有磁碟,或CD-ROM驅動器裡沒有光碟,將得到一個錯誤提示:“Disk Not Ready”。除了DriveLetter屬性和DriveType屬性外,在使用其他屬性和方法前,通過檢查每個驅動器的IsReady屬性,可以保護該頁面。

FileSystemObject物件的方法

  • 與驅動器有關的方法
方法 說明
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     '判斷相應的碟符是否存在,如存在輸出
        MsgBox "存在 "&strLetter&": 驅動器"
    End If
Next
  • 與資料夾有關的方法
用FileSystemObject物件來操作資料夾的方法:
方法 說明
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) 說明:將資料夾從某位置遞迴複製到另一位置。 示例:
' 建立FileSystemObject物件
Set objFSO = CreateObject("Scripting.FileSystemObject")
' 將D:\Test下所有的內容複製到C:\123
objFSO.CopyFolder "D:\Test","C:\123"
CreateFolderDeleteFolder的使用 方法名:CreateFolder(foldername)/DeleteFolder(folderspec,force) 說明:建立/刪除一個路徑名為 foldername 的資料夾。 示例:
' 建立FileSystemObject物件
Set objfso = createobject("scripting.FileSystemObject")
‘ 在c:/建立new folder資料夾,如果資料夾存在,則會出現錯誤提示
objfso.CreateFolder("c:/new folder")
‘ 刪除c:/new folder資料夾
objfso.DeleteFolder("c:/new folder")
注:DeleteFolder無論資料夾是否包含內容,都將刪除該資料夾 FolderExists的使用 方法名:FolderExists(folderspec) 說明:如果指定的資料夾存在,則返回 True;否則返回 False。 示例:
Function hanshu(strpath)
    Dim objFSO,objSet
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    If Not objFSO.FolderExists(strpath) Then
        objSet = objFSO.CreateFolder(strpath)
        MsgBox "資料夾建立成功"
    Else
        objSet = objFSO.DeleteFolder(strpath)
        MsgBox "資料夾刪除成功"
    End If
    hanshu = objSet
    End Function
    
    path = InputBox("請輸入資料夾路徑")
    hanshu(path)
GetAbsolutePathName的使用 方法名:GetAbsolutePathName(pathspec) 說明:從提供的指定路徑中返回完整且含義明確的路徑。 示例:
Dim objFSO
'建立FileSystemObject物件
Set objFSO = CreateObject("Scripting.FileSystemObject")
'返回當前的目錄,下面兩條語句返回一樣的結果
MsgBox(objFSO.GetAbsolutePathName(""))
MsgBox(objFSO.GetAbsolutePathName("c:"))
GetFolder的使用 方法名:GetFolder(folderspec) 說明:返回與指定的路徑中某資料夾相應的 Folder 物件。可以根據所返回的Folder 物件,再去訪問該Folder 物件所持有的屬性。 示例:
Dim objFSO,objSet,strPath
'建立FileSystemObject物件
Set objFSO = CreateObject("Scripting.FileSystemObject")
strPath = InputBox("請輸入資料夾的路徑")
Set objSet = objFSO.GetFolder(strPath)
' 根據所返回的Folder物件,去訪問其相關的屬性
MsgBox("資料夾建立的日期:"&objSet.DateCreated&vbCrLf&"資料夾所在驅動:"&objSet.Drive&vbCrLf&"資料夾名稱:"&objSet.Name)
GetParentFolderName的使用 方法名:GetParentFolderName(pathspec) 說明:返回字串,該字串包含指定的路徑中最後一個檔案或資料夾的父資料夾。 示例:
Dim objFSO
'建立FileSystemObject物件
Set objFSO = CreateObject("Scripting.FileSyStemObject")
'使用GetParentFolderName方法來返回上一層資料夾
MsgBox(objFSO.GetParentFolderName("C:\Windows\System32"))
GetSpecialFolder的使用 方法名:GetSpecialFolder(folderspec) 說明:返回指定的特殊資料夾。 示例:
Dim objFSO,tempName
Set objFSO = CreateObject("Scripting.FileSystemObject")
'GetSpecialFolder()中的引數2,返回一個名為Temp的臨時資料夾
Set tempName = objFSO.GetSpecialFolder(2)
MsgBox tempName
MoveFolder的使用 方法名:MoveFolder(source,destination) 說明:將一個或多個資料夾從某位置移動到另一位置。 示例:
Dim Source,Destination
Source = InputBox("請輸入原資料夾")
Destination = InputBox("請輸入目標資料夾")
'呼叫MoveFolders方法
Call MoveDir(Source,Destination)

Sub MoveDir(s,d)
Dim FSO
'建立FileSystemObject物件
Set FSO = CreateObject("Scripting.FileSystemObject")
 '使用MoveFolder方法,將原資料夾移動到目標資料夾
FSO.MoveFolder s,d
End Sub
注:如果指令碼在執行前目標資料夾已存在,則執行是會發生錯誤;在不同的磁碟下MoveFolder方法不能用 上面提到的Folder方法是基於FileSystemObject物件的,現在我們來看看基於Folder物件的方法

Folder子物件的方法

Folder物件提供一組可用於複製、刪除和移動當前資料夾的方法。這些方法的執行方式與FileSystemObject物件的CopyFolder、DeleFolder和MoveFolder方法相同,但這些方法不要求source引數,因為原始檔就是這個資料夾。 備註:CopyFolder、DeleFolder等方法是基於FileSystemObject物件的;而下面的Copy、Delete等方法是基於FileSystemObject物件下的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資料夾中。 示例:
Dim Source,Destination
Source = InputBox("請輸入原資料夾")
Destination = InputBox("請輸入目標資料夾")
Call Copyx(Source,Destination)

Sub Copyx(s,d)
Dim FSO,objSet
Set FSO = CreateObject("Scripting.FileSystemObject")
Set objSet = FSO.GetFolder(s)    '使用GetFolder方法來返回Folder物件
objSet.Copy(d)    '使用Copy方法將原資料夾中的內容複製到目標資料夾中
End Sub
備註:如果目標資料夾不存在,則指令碼在執行是將自動建立 Delete的使用 方法名:Delete(force) 說明:刪除資料夾及裡面的所有內容。 示例:
Dim path
path = InputBox("請輸入要刪除的資料夾")
Call Del(path)

Sub Del(p)
Dim FSO,ObjSet
Set FSO = CreateObject("Scripting.FileSystemObject")
Set ObjSet = FSO.GetFolder(p)
ObjSet.Delete(True)
End Sub
備註:如果資料夾屬性為只讀且Delete的引數為False,則指令碼在執行是將提示“沒有許可權”;當資料夾不存在時,將提示“路徑未找到”。 Move的使用 方法名:Move(destination) 說明:將資料夾及裡面所有的內容移動到 destination 指定的資料夾。 示例:
Dim Source,Destination
Source = InputBox("請輸入原資料夾")
Destination = InputBox("請輸入目標資料夾")
Call Movex(Source,Destination)

Sub Movex(s,d)
Dim FSO,objSet
Set FSO = CreateObject("Scripting.FileSystemObject")
Set objSet = FSO.GetFolder(s)
objSet.Move(d)
End Sub
CreateTextFile的使用 方法名:CreateTextFile(filename,overwrite,unicode) 說明:建立指定檔案並返回 TextStream 物件,該物件可用於讀或寫建立的檔案。 示例:
Dim strPath,strFile
strPath = InputBox("請輸入建立資料夾的路徑")
strFile = InputBox("請輸入檔名稱")
Call CreateFilex(strPath,strFile)

Sub CreateFilex(path,file)
Dim FSO,objSet
Set FSO = CreateObject("Scripting.FileSystemObject")
Set objSet = FSO.GetFolder(path)
objSet.CreateTextFile file,True
End Sub
備註:CreateTextFile()所建立的檔案型別是根據所提供的副檔名來確定的,FileSystemObject物件也可以呼叫CreateTextFile()

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物件我們就可以訪問其提供的方法及屬性 DriveDateCreatedName屬性的使用 示例:
Dim path
path = InputBox("請輸入資料夾路徑")
Call FolderAttributes(path)
Sub FolderAttributes(sourcepath)
Dim FSO,objSet
Set FSO = CreateObject("Scripting.FileSystemObject")
'使用GetFolder方法來返回Folder物件
Set objSet = FSO.getFolder(sourcepath)
'通過Folder物件來訪問Folder屬性
MsgBox ("資料夾所在磁碟為:"&objSet.Drive&vbCrLf&"資料夾建立的日期:"&objSet.DateCreated&vbCrLf&"資料夾的名稱為:"&objSet.Name)
End Sub
SubFolers屬性的使用 示例:
Dim path
path = InputBox("請輸入資料夾路徑")
Call FolderAttributes(path)
Sub FolderAttributes(sourcepath)
Dim FSO,objSet,objFolders,objFolder,FolderName,i
Set FSO = CreateObject("Scripting.FileSystemObject")
'使用GetFolder方法來返回Folder物件
Set objSet = FSO.getFolder(sourcepath)
'SubFolders屬性將返回所有子資料夾對應的Folder集合
Set objFolders = objSet.SubFolders
i = 0
For Each objFolder In objFolders
i = i+1
FolderName = FolderName&objFolder.Name&vbCr
Next
MsgBox (sourcepath&"路徑下共有"&i&"個資料夾,資料夾的名稱為:"&vbCrLf&FolderName)
End Sub
Files屬性的使用 示例:
Dim path
path = InputBox("請輸入資料夾路徑")
Call FolderAttributes(path)
Sub FolderAttributes(sourcepath)
Dim FSO,objSet,objFiles,objFile,FileName,i
Set FSO = CreateObject("Scripting.FileSystemObject")
'使用GetFolder方法來返回Folder物件
Set objSet = FSO.getFolder(sourcepath)
'遍歷Files集合並顯示資料夾中所有的檔名
Set objFiles = objSet.Files
i = 0
For Each objFile In objFiles
i = i+1
FileName = FileName&"("&i&")"&objFile.Name&vbCr
Next
MsgBox (sourcepath&"路徑下共有"&i&"個檔案,檔案的名稱為:"&vbCrLf&FileName)
End Sub
  • 與檔案有關的方法及屬性
用FileSystemObject物件來操作檔案的方法:
方法 說明
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),用系統預設格式開啟
CopyFileMoveFile的使用 方法名:CopyFile(source,destination,overwrite) 說明:將一個或多個檔案從某位置複製到另一位置。 方法名: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資料夾不存在,則指令碼執行時提示“路徑不存在” CreateTextFileDeleteFile的使用 方法名:CreateTextFile(filename,overwrite,unicode) 說明:建立指定檔案並返回 TextStream 物件,該物件可用於讀或寫建立的檔案。 方法名:DeleFile(filespec,force) 說明:刪除指定的檔案。 示例:
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
FileExists的使用 方法名:FileExists(filespec) 說明:判斷所指定的檔案是否存在。此方法將返回Bool值。 示例:
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
GetBaseNameGetFileNameGetExtensionName的使用 方法名: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的屬性。 示例:
Sub FolderAttributes(sourcepath)
Dim fso,objFile
Set fso = CreateObject("Scripting.FileSystemObject")
'呼叫GetFile()返回File物件,通過File物件來訪問其下的屬性
set objFile = fso.GetFile(sourcepath)
MsgBox("該檔案所在的碟符為:"&objFile.Drive&vbCrLf&"檔名為:"&objFile.Name)
End Sub
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
OpenTextFile的使用 方法名:(filename,iomode,create,format) 說明:開啟指定的檔案並返回一個 TextStream 物件,可以讀取、寫入此物件或將其追加到檔案。 示例:
Dim path
path = InputBox("請輸入檔案的位置")
strContent = InputBox("請輸入追加的內容")
'三個引數的分別為:以只讀模式開啟檔案、以只寫方式開啟檔案、開啟檔案並在檔案末尾進行寫操作
Const intForReading = 1,intForWriting = 2,intForAppending = 8
'呼叫OpenTextFileTest()
Call OpenText(path,intForAppending,strContent)
Sub OpenText(path,intForAppending,strContent)
Dim FSO,objTStream
'建立FileSystemObject物件
Set FSO = CreateObject("Scripting.FileSystemObject")
'引數true表示:如果檔案不存在,則建立檔案。最後OpenTextFile()將返回TextStream物件
Set objTStream = FSO.OpenTextFile(path,intForAppending,True)
'利用TextStream物件來將字串寫入檔案
objTStream.Write strContent
'釋放TextStream物件
objTStream.Close
End Sub

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 = InputBox("請輸入檔案所在的路徑")
Call FolderAttributes(sourcepath)

Sub FolderAttributes(sourcepath)
Dim fso,objFile
Set fso = CreateObject("Scripting.FileSystemObject")
'呼叫GetFile()返回File物件,通過File物件來訪問其下的屬性
set objFile = fso.GetFile(sourcepath)
MsgBox("該檔案所在的碟符為:"&objFile.Drive&vbCrLf&"檔名為:"&objFile.Name)
End Sub
備註:File物件屬性的使用方法和前面介紹的Folder物件屬性的使用方法一樣,所以在這不一一列出。

TextStream物件

TextStream物件是用於訪問文字檔案的物件,它是FIleSystemObject一個獨立的附屬物件,但在使用TextStream物件時,我們仍要藉助FileSystemObject物件或其附屬物件來建立一個TextStream物件訪問磁碟檔案的內容。可以通過FileSystemObject物件的CreateTextFile()及OpenTextFile(),來獲取TextStream的物件控制代碼。 下面我們來具體的看看TextStream 物件的方法及屬性的使用。

TextStream物件的方法

方法 說明
Close() 關閉一個開啟的檔案
Read(numchars) 從檔案中讀出numchars個字元
ReadAll() 作為單個字串讀出整個檔案
ReadLine() 作為一個字串從檔案中讀出一行(直到回車符和換行)
Skip(numchars) 當從檔案讀出時忽略numchars個字元
SkipLine() 當從檔案讀出時忽略下一行
Write(string) 向檔案寫入字串string
WriteLine(string) 向檔案寫入字串string(可選)和換行符
WriteBlankLines(n) 向檔案寫入n個換行符
CloseWriteWriteLineWriteBlankLines的使用 方法名:Close() 說明:關閉正在開啟的檔案 方法名:WriteLine(string) 說明:向檔案寫入字串 string(可選)和換行符。 示例:
Dim strPath,strText
strPath = "c:\users\text.txt"
strText = "This is a test"
Call CreateFile(strPath,strText)
Sub CreateFile(Path,Text)
Dim objFSO,objStream
'建立FileSystemObject物件
Set objFSO = CreateObject("Scripting.FileSystemObject")
'使用FileSystemObject物件的CreateTextFile(),來返回一個TextStream物件控制代碼
Set objStream = objFSO.CreateTextFile(Path,True)
'三個Write的意思分別為:寫入3個換行符、寫入帶換行符的字元、在文字中寫入字元
objStream.WriteBlankLines 3
objStream.WriteLine(Text)
objStream.Write(Text)
'關閉TextStream物件
objStream.Close
End Sub
ReadReadAllReadLine的使用 方法名: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
SkipSkipLine的使用 方法名: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所示。注意,所有的屬性是隻讀的。
表10TextStream物件的屬性及說明
屬性 說明
AtEndOfLine 如果檔案位置指標在檔案中一行的末尾則返回True
AtEndOfStream 如果檔案位置指標在檔案的末尾則返回True
Column 從1開始返回檔案中當前字元的列號
Line 從1開始返回檔案中當前行的行號”
AtEndOfLine AtEndOfStream 屬性僅對以 iomode 引數為 ForReading 的方式開啟的檔案可用,否則將會出錯。 AtEndOfLineAtEndOfStream的使用
Dim strPath,strText
strPath = "c:\test.txt"
Call ReadFile(strPath)
Sub ReadFile(Path)
Dim objFSO,objStream,stri
Set objFSO = CreateObject("Scripting.FileSystemobject")
'以只讀的方式開啟檔案
Set objStream = objFSO.OpenTextFile(Path,1,True)
'如果當前的指標不在行末,則讀取文字內容
Do While objStream.AtEndOfLine <> True
'如果當前指標不在文字末尾 'Do while objStream.AtEndOfStream <> true
stri = stri + objStream.Read(1)
Loop
MsgBox stri
objStream.Close
End Sub
備註:兩者間的區別是:AtEndOfLine——讀取到當前文字行的末尾;AtEndOfStream——讀取到整個文字的末尾 ColumnLine的使用 示例:
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