精華區beta Office 關於我們 聯絡資訊
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 %>