http://blog.xuite.net/chenshichang/date/21838056
FileSystemObject物件及其子物件
FileSystemObject---Drive
Drives
File
Files
Folder
Folders
TextStream
Folder物件
建立一目錄所對應的Folder物件:
Dim fs As New FileSystemObject '建立FileSystemObject
Dim fd As Folder '宣告Folder物件
'建立C:\ 資料夾所對應的Folder物件
Set fd = fs.GetFolder("C:\")
上例,如果沒有加上New保留字,則只算是宣告一個物件變數。
New: 建立物件專用的保留字
Folder物件相關屬性
.Attributes 保存、唯讀、隱藏、系統等屬性
.DateCreated 建立的日期
.DateLastAccessed 最後存取的日期
.DateLastModified 最後一次修改的日期
.Drive 所屬的磁碟機
.Files 該資料夾所包含的檔案
.IsRootFolder 是否為根目錄
.Name 資料夾名稱
.ParentFolder 上一層的Folder物件
.Path 資料夾的完整路徑
.ShortName 資料夾短名稱,如"MYDOCU~1"
.ShortPath 資料夾短名稱完整路徑
.Size 整個資料夾(含子資料夾)所佔用磁碟空間大小
.SubFolders 該資料夾所包含的子資料夾
Files集合物件及File物件
Private Sub Command1_Click()
Dim fs As New FileSystemObject '建立FileSystemObject物件
Dim fd As Folder '宣告Folder物件
Dim f As File '宣告File物件
'建立c:\資料夾所對應的Folder物件,GetFolder(路徑)方法
Set fd = fs.GetFolder("C:\")
For Each f In fd.Files
'列舉每一個檔案後,將其名稱加入於ListBox之中
List1.AddItem f.Name
Next
End Sub
SubFolders集合物件
Dim sfd As Folder '宣告Folder物件
For Each sfd In fd.SubFolders '對每一個SubFolder物件(sfd)
List1.AddItem sfd.Name
Next
Folder物件及File物件屬性
Function GetFolderSize(fd As Folder) As Long
On Error Goto ErrRead 'fd.Size可能失敗:如A:無磁片
'若企圖讀取根目錄,將產生錯誤
If fd.IsRootFolder Then
GetFolderSize = fd.Drive.TotalSize
Else
GetFolderSize = fd.Size
End If
ErrRead:
GetFolderSize = 0
End Function
列舉資料夾中的所有子(子子)資料夾
Sub ListFolder(fd As Folder)
Dim sfd As Folder
For Each sfd In fd.SubFolders
Debug.Print sfd.Path
ListFolder sfd '以 sfd 為參數,遞迴呼叫
Next
End Sub
系統檔及隱藏檔
File物件.Attributes屬性
1 ReadOnly 唯讀
2 Hidden 隱藏
4 System 系統
16 Directory 目錄
32 Archive 保存
Dim f As File
If (f.Attributes And 1) = 1 Then
' f 為「唯讀檔」
End If
If (f.Attributes And 32) = 32 Then
' f 為「保存檔」
End If
If (f.Attributes And (32+1)) = (32+1) Then
' f 為「唯讀檔兼保存檔」
End If
If (Not (f.Attributes And System) = System) And _
Not (f.Attributes And Hidden) = Hidden)) Then
' f 非「系統檔」也非「隱藏檔」
End If
搜尋檔案
Sub FindFile(fd As Folder, FileName As String)
Dim sfd As Folder, f As File
For Each f In Fd.Files
If UCase(f.Name) Like UCase(FileName) Then
' 檔名符合
Debug.Print f.Path
End If
DoEvents '搜尋過程中,允許其他程式Interrupt,避免獨佔CPU
Next
' 遞迴搜尋所有子資料夾
For Each sfd In fd.SubFolders
FindFile sfd, FileName '遞迴搜尋
Next
End Sub
檔案與資料夾的存取方法(methods)
1. OpenTextFile
Set TextStream1 =
FileSystemObject1.OpenTextFile(FileName, _
IO_Mode, _
AutoCreate_Flag)
2. CreateTextFile
Set TextStream1 =
FileSystemObject1.CreateTextFile(FileName, _
Overwrite_Flag)
e.g.
Dim fs As New FileSystemObject
Dim txtf As TextStream
'建立 C:\test.txt, 若已存在則覆寫之
Set txtf = fs.CreateTextFile("C:\test.txt")
On Error Resume Next '忽略錯誤繼續向下執行
'建立C:\test.txt, 若已存在則產生錯誤
Set txtf = fs.CreateTextFile("C:\test.txt", False)
If Err = 58 Then ' 錯誤代碼58表示「檔案已存在」
... '處理
End If
On Error Goto 0 ' 恢復錯誤偵測
3. FileExists
' fs 為FileSystemObject物件
If fs.FileExists("C:\test.txt") Then '檔案已存在
'其他處理方式
Else
Set txtf = fs.CreateTextFile("C:\test.txt")
End If
4. ReadLine 與 WriteLine
' txtf 及 txtf2均為TextStream物件
str = txtf.ReadLine '讀取一行資料,並設定給 str 變數
txtf2.WriteLine str '將變數 str 的資料寫入成為檔案的一行資料
5. AtEndOfStream
If Not txtf.AtEndOfStream Then '如果還沒有到檔案結尾
str = txtf.ReadLine ' 讀取資料
End If
6. ReadAll
If Not txtf.AtEndOfStream Then '如果還沒有到檔案結尾
str = txtf.ReadAll ' 一次讀取所有資料
End If
7. Read 及 Write
N = 80
str = txtf.Read(N) '讀取80個字元
如果不足,則讀多少算多少
Read與Readine的不同:ReadLine只能讀文字檔;Read還可以讀取二進位
檔,如.exe、.dll、bmp等檔案
Write與WriteLine不同在於WriteLine每次寫入資料到檔案時,都會再多
寫入Chr(13)及Chr(10)字元(也就是換行字元),但Write則單純入資料。
FileSystemObject物件方法
1. CopyFile
FileSystemObject1.CopyFile 來源檔, 目的檔[, 是否覆蓋既有檔]
e.g.
Dim fs As New FileSystemObject
'不管C:\Test2.txt是否存在,一律以Test1.txt蓋掉Test2.txt
fs.CopyFile "C:\Test1.txt", "C:\Test2.txt"
'然而下一行寫法,如果C:\Test2.txt已存在,則產生錯誤
fs.CopyFile "C:\Test1.txt", "C:\Test2.txt", False
'複製多個檔案
fs.CopyFile "C:\*.txt", "C:\tmp\"
2. DeleteFile
FileSystemObject1.DeleteFile 檔案[,是否強制刪除]
若要刪除「唯讀」檔案,必須設強制刪除,否則會產生「沒有使用權
」的錯誤(錯誤代碼70)。
3. MoveFile
FileSystemObject1.MoveFile 來源檔案, 目的檔案
(1)當來源檔案與目的檔案在同目錄時,MoveFile功用等於變更檔名;
在不同目錄時,功能是移動檔案;當跨越不同磁碟機時,則是複製
檔案。
(2)來源檔案名稱可含有萬用字元(Wildcard,如* 或 ? 等)。
4. CopyFolder
FileSystemObject1.CopyFolder 來源資料夾, 目的資料夾[,是否覆蓋]
5. DeleteFolder
FileSystemObject1.DeleteFolder 資料夾[,是否強制刪除]
若資料夾中含有「唯讀」檔案,必須設強制刪除,否則會產生「沒有
使用權」的錯誤(錯誤代碼70)。
6. MoveFolder
FileSystemObject1.MoveFolder 來源資料夾, 目的資料夾
請注意「目的資料夾」最後面有沒有"\",例如:
Dim fs As New FileSystemObject
'例一:將C:\test 資料夾底下的Temp1資料夾更名為Temp2
fs.MoveFolder "c:\test\Temp1", "C:\test\Temp2"
'例二:將C:\test 資料夾底下的Temp1資料夾移成為Temp2
' 的子資料夾
fs.MoveFolder "C:\test\Temp1", "C:\test\Temp2\"
7. FolderExists
Dim fs As New FileSystemObject
If fs.FolderExists("C:\test1") Then
' 表示 C:\test1為已存在的資料夾
End If
8. CreateFolder
FileSystemObject1.CreateFolder("C:\AAA\BBB")
Drive物件屬性
AvailableSpace 可用空間,以Byte為單位
DirveLetter 磁碟機的英文字母代號,例如第一個硬碟為"C"
DriveType 磁碟機類型,可用來判斷硬碟、光碟 …
FileSystem 檔案系統,例如"FAT"、"FAT32"、"NTFS"
FreeSpace 可用空間,以Byte為單位
IsReady 是否為可用狀態,對於抽取式磁碟而言,必須插入
格式化的磁碟片,此一屬性值才會True
Path 路徑,例如C碟等為"C:\"
RootFolder 根目錄,例如C碟等為"C:\"
SerialNumber 磁碟機序號
ShareName 網路共用磁碟的名稱
TotalSize 磁碟機總大小,以Byte為單位
VolumeName 磁碟機名稱
取得Drive物件
Dim fs As New FileSystemObject
Dim drv As Drive ' 宣告一Drive物件
'取得C磁碟機的Drive物件
Set drv = fs.GetDrive("C:")
'或逐一列舉每一磁碟機
For Each drv In fs.Drives
...
Next
判斷Drive的種類
Drive1.DriveType屬性
屬性值 意義
Unknown (0) 無從判斷
Removable (1) 抽取式磁碟,如軟碟
Fixed (2) 硬碟
Remote (3) 遠端裝置(網路虛擬磁碟機)
CDRom (4) 光碟機
RamDisk (5) RAM Disk
範例
<%
dim filesys, filetxt, getname, path
Set filesys = CreateObject("Scripting.FileSystemObject")
Set filetxt = filesys.CreateTextFile("c:\somefile.txt", True)
path = filesys.GetAbsolutePathName("c:\somefile.txt")
getname = filesys.GetFileName(path)
filetxt.WriteLine("Your text goes here.")
filetxt.Close
If filesys.FileExists(path) Then
Response.Write ("Your file, '" & getname & "', has been created.")
End If
%>