講師:戴志華 hana@arbor.ee.ntu.edu.tw 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 hana@arbor.ee.ntu.edu.tw 國立台灣大學電機工程研究所
第十一章 檔案存取
DriveList 屬性 Drive 目前磁碟機代碼 List 可選擇磁碟機(列表) ListCount 可選擇磁碟機個數 ListIndex 已選擇的磁碟機的位置 事件 Change 所選擇的磁碟機改變時
DriveListBox(cont’d)
DriveListBox(cont’d) Private Sub Drive1_Change() Print "磁碟代碼=" & Drive1.Drive Print "listcount=" & Drive1.ListCount Print "listindex=" & Drive1.ListIndex Print "目前磁碟所在=" & Drive1.List(Drive1.ListIndex) End Sub Private Sub form_click() Drive1.Drive = "c:"
DirListBox 屬性 Path 目前目錄 List 可選擇目錄 ListCount 目前目錄下可選擇目錄個數 ListIndex 已選擇目錄的位置 事件 Change 所選擇的目錄改變時
DirListBox (cont’d)
DirListBox (cont’d) Private Sub Dir1_Change() MsgBox "目前目錄所在:" & Dir1.Path End Sub Private Sub form_click() Cls Print "目前目錄:" & Dir1.Path Print "目前目錄下可選擇目錄個數:" & Dir1.ListCount Print "已選擇目錄位置:" & Dir1.ListIndex Print "已選擇目錄:" & Dir1.List(Dir1.ListIndex) Print "位置0的目錄:" & Dir1.List(0)
FileListBox 屬性 FileName 已選擇檔案的檔名 Path 目前目錄 List 可選擇檔案 ListCount 目前目錄下可選擇檔案數目 ListIndex 已選擇檔案的位置 MultiSelect 可否重複選擇 Selected(數字) 某個元素是否有被選 Pattern *.* 或 *.txt ……
FileListBox(cont’d) 事件 Click PatternChange PathChange 目前目錄改變時
FileListBox(cont’d)
FileListBox(cont’d) Private Sub File1_Click() Form1.Cls Print "目前目錄: " & File1.Path Print "已選擇檔案的檔名: " & File1.FileName Print "目前目錄下可選擇檔案數目:" & File1.ListCount Print "已選擇檔案的位置: " & File1.ListIndex Print "可否重複選擇: " & File1.MultiSelect Print "某個檔案是否有被選: " & File1.Selected(0) Print "pattern(*.* 或 *.txt): " & File1.Pattern Print "已選擇檔案的完整路徑: "; File1.Path + "\" + File1.FileName End Sub Private Sub Form_Activate() File1.Path = "c:\temp"
Exercise:整合
Exercise:整合(cont’d) Private Sub updatePath() Text1.Text = Dir1.Path + File1.FileName End Sub Private Sub Command1_Click() File1.Pattern = Text2.Text Private Sub Drive1_Change() Dir1.Path = Drive1.Drive
Exercise:整合 (cont’d) Private Sub Dir1_change() File1.Path = Dir1.Path updatePath End Sub Private Sub File1_click()
File System Objects 專案->設定使用參考元件
File System Objects File System Objects共有五種物件 FileSystemObject File Folder Drive TextStream
FileSystemObject 屬性 Drives 傳回目前本機上的磁碟機的collection 方法 CopyFile 複製檔案 CopyFolder 複製目錄 CreateFolder 產生新檔案 CreateTextFile 產生新文字檔 DeleteFile 刪除檔案
FileSystemObject(cont’d) 方法 DeleteFolder 刪除目錄 DriveExists 回傳磁碟機是否存在 FileExists 回傳檔案是否存在 FolderExists 回傳目錄是否存在 GetAbsolutePathName 取得絕對路徑名 GetDrive 取得Drive物件 GetDriveName 取得磁碟機名 GetFile 取得File物件
FileSystemObject(cont’d) 方法 GetFileName 取得檔案名 GetFolder 取得Folder物件 GetParentFolderName 取得父目錄名 GetTempName 取得暫存檔檔名 MoveFile 搬移檔案 MoveFolder 搬移目錄 OpenTextFile 開啟文字檔
FileSystemObject(cont’d) 語法: Dim 變數名 As New FileSystemObject (*Drive, Folder, File, TextStream亦同) copyFile 語法: CopyFile 來源, 目的 [, 覆蓋模式] 功能: 複製檔案 參數說明: 來源、目的 : 字串 (來源、目的可用*與?) 覆蓋模式: boolean,預設值為true
FileSystemObject(cont’d) Private Sub form_click() Dim fs As New FileSystemObject fs.CopyFile "c:\autoexec.bat", "c:\test", False End Sub 執行第二次時,會發生 ERROR!
FileSystemObject(cont’d) copyFolder 語法: CopyFolder 來源, 目的[, 覆蓋模式] 功能: 複製目錄 範例1: 將來源目錄下所有的檔案、目錄,複製到目的目錄 CopyFolder “c:\temp”, “c:\tmp”,false 範例2: 將來源目錄下某些目錄複製到目的目錄 Copy Folder “c:\temp\a*”, “c:\tmp”,false
FileSystemObject(cont’d) createFolder 語法: CreateFolder 目錄名 功能: 產生新目錄, 若目錄已存在,則發生錯誤 createTextFile 語法: CreateTextFile 檔名[, 覆蓋模式] 功能:產生新檔案 說明:傳回TextStream
FileSystemObject(cont’d) Private Sub form_click() Dim fs As New FileSystemObject fs.CreateFolder "c:\a" fs.CreateTextFile "c:\a\test" End Sub
FileSystemObject(cont’d) DeleteFile 語法: DeleteFile 檔名[, force] 功能:刪除檔案 說明: 檔名可包含*與? 若force=false, 則無法刪除屬性是read only的檔案
FileSystemObject(cont’d) DeleteFolder 語法: DeleteFolder 目錄名[, force] 功能:刪除檔案 說明:目錄名可包含*與? 若force=false, 則無法刪除屬性是read only的目錄 即使目錄內有檔案也會刪除
FileSystemObject(cont’d) Private Sub Command1_Click() Dim fs As New FileSystemObject fs.DeleteFile File1.Path + "\" + _ File1.FileName File1.Refresh End Sub Private Sub Dir1_Change() File1.Path = Dir1.Path Private Sub Drive1_Change() Dir1.Path = Drive1.Drive
FileSystemObject(cont’d) DriveExists 語法: DriveExists 磁碟機名 功能: 檢查該磁碟機是否存在 說明: 若CDROM沒有光碟片,也會回傳true 要用Drive物件的IsReady來偵測 範例: dim fs as new filesystemobject rlt= fs.DriveExists(“c:”) FileExists 檔案名 FolderExists 目錄名
FileSystemObject(cont’d) GetAbsolutePathName 語法: GetAbsolutePathName pathspec 說明: 假設當前目錄為 c:\mydocuments\reports pathspec 回傳值 “c:” “c:\mydocuments\reports” “c:..” “c:\mydocuments\” “c:*.*\may97” “c:\mydocuments\reports\*.*\may97 “region1” “c:\mydocuments\reports\region1
FileSystemObject(cont’d) GetDrive 語法: GetDrive 磁碟機名 說明:回傳Drive物件 GetDriveName 語法: GetDriveName 磁碟機名 GetFile 語法: GetFile 檔案名 說明:回傳File物件 GetFileName 語法: GetFileName 路徑名
FileSystemObject(cont’d) GetFolder 語法: GetFolder 目錄名 說明:回傳Folder物件 GetParentFolderName 語法: GetParentFolderName 路徑名 範例: GetParentFolderName(“c:\a\b\c”) “c:\a\b” GetTempName 語法: GetTempName
FileSystemObject(cont’d) MoveFile 語法: MoveFile 來源, 目的 MoveFolder 語法: MoveFolder 來源, 目的
FileSystemObject(cont’d) OpenTextFile 語法: OpenTextFile 檔名 [, IO模式 [,create] ] 說明: IO模式 ForReading ForAppending Create: 若檔案不存在,是否開新檔案(Boolean) 傳回TextStream
練習 show出檔案所在的磁碟名稱 show出檔案所在的目錄名稱 show出暫時的檔名
Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive Private Sub File1_Click() Dim fs As New FileSystemObject Text1.Text = "GetDriveName: " + _ fs.GetDriveName(File1.Path) _ + vbNewLine + _ "GetParentFolderName: " + _ fs.GetParentFolderName(File1.Path) _ "GetTempName: " + fs.GetTempName()