1 / 51

CH07

CH07. 檔案存取. Windows 程式設計基本概念. Visual Basic 2005 當中存取檔案的方式. 透過 System.IO.File ( 傳統方法 ) 透過 My.Computer.FileSystem (VB2005 新功能 ). ' 原有存取檔案資訊的方法 Dim dir As New IO.DirectoryInfo( "C:" ) Dim fi() As IO.FileInfo = dir.GetFiles( "*.*" ) ' 取得 C 槽底下檔案的完整路徑 Dim fullPathAr As New ArrayList

Download Presentation

CH07

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CH07

  2. 檔案存取

  3. Windows程式設計基本概念 Visual Basic 2005當中存取檔案的方式 • 透過System.IO.File (傳統方法) • 透過My.Computer.FileSystem (VB2005新功能) '原有存取檔案資訊的方法 Dim dir AsNew IO.DirectoryInfo("C:\") Dim fi() As IO.FileInfo = dir.GetFiles("*.*") '取得C槽底下檔案的完整路徑 Dim fullPathAr AsNew ArrayList ForEach docPath As IO.FileInfo In fi fullPathAr.Add(docPath.FullName) Next '新的存取檔案路徑的方法 Dim ar As System.Collections.ObjectModel.ReadOnlyCollection(OfString) = My.Computer.FileSystem.GetFiles("C:\", FileIO.SearchOption.SearchTopLevelOnly, "*.*") 從範例您可以發現,程式碼大幅的減少,開發人員所要進行的Coding時間相對的縮短,產量當然也就提高了。

  4. Windows程式設計基本概念 My.Computer.FileSystem.CopyDirectory()

  5. Windows程式設計基本概念 My.Computer.FileSystem.CreateDirectory()

  6. Windows程式設計基本概念 My.Computer.FileSystem.CurrentDirectory()

  7. Windows程式設計基本概念 My.Computer.FileSystem.DeleteDirectory()

  8. Windows程式設計基本概念 My.Computer.FileSystem.DirectoryExists() 判斷C槽下是否有test資料夾,如果C槽底下有test資料夾,則回傳True,如果test資料夾不存在則回傳False。

  9. Windows程式設計基本概念 My.Computer.FileSystem.GetDirectories() 搜尋在c槽的test資料夾底下,有沒有資料夾是以『文件』結尾的。如果c槽的test資料夾底下有『書籍文件、文件暫存區、資料文件檔』這三個資料夾,則會讀出『c:\test\書籍文件』這個路徑。

  10. Windows程式設計基本概念 My.Computer.FileSystem.GetDirectoryInfo() 指令『GetDirectoryInfo』將會傳回指定的資料夾資訊,回傳值以『DirectoryInfo』物件呈現,上面的程式碼讀取c槽的test資料夾訊息,並回傳給DirectoryInfo物件(名為dirInfo),而『dirInfo .CreationTime』則是取回test資料夾的建立時間。

  11. Windows程式設計基本概念 My.Computer.FileSystem.MoveDirectory() 程式碼將c槽底下的test資料夾移動到d槽的files的testFile,移動後c槽下面的test資料夾會被刪除。底下為兩種常用確認移動的方式,一種是直接設定當目的地已經存在同名資料夾,就直接覆蓋;另一種是出現對話視窗,讓使用者選擇是否要覆蓋。

  12. Windows程式設計基本概念 My.Computer.FileSystem.RenameDirectory() 程式碼將c槽下面的test資料夾更名為『BookExamples』。

  13. Windows程式設計基本概念 My.Computer.FileSystem.SpecialDirectories() 在系統當中,有一些特殊的常用資料夾,例如『我的文件』、『Program Files』…等。這些資料夾的位置並不一定是我們熟悉的C:\…,因為使用者可以將系統安裝在不同的硬碟(例如:D:\),同時像『我的文件』這類的資料夾,還會因為該電腦目前登入的是不同的使用者而有不同的位置,因此該資料夾的位置可能不確定。 此函式之功能,則在傳回正確的資料夾位置,以讓我們在程式碼中可以取得正確的路徑加以運作。

  14. Windows程式設計基本概念 My.Computer.FileSystem.Drives() 取得電腦上磁碟集合後,可以取得個別的磁碟訊息。每個人電腦的作業環境不同,因此有可能會讀取到不一樣的磁碟內容,筆者的作業環境中有三個磁碟,執行下面這一段程式碼時,第一筆會讀取到的磁碟資料為『C:\ 』的磁碟格式為FAT32;第二筆為『D:\ 』的磁碟格式為:NTFS;最後是E槽光碟機,在還沒有放入光碟片,會引發『裝置未就緒』的錯誤訊息。

  15. Windows程式設計基本概念 My.Computer.FileSystem.GetDriveInfo() DriveInfo物件,可用來表達一個邏輯磁碟機的狀態,也可以透過DriveInfo物件的屬性來取得該磁碟機的可用空間等資訊。上面的程式碼為取得c槽磁碟訊息後,讀出c槽可用空間的大小。

  16. Windows程式設計基本概念 My.Computer.FileSystem.CopyFile() 將C槽test資料夾底下的『book.txt』文字檔,複製到D槽files資料夾底下;當D槽下面沒有『files』資料夾時,程式會自動建立一個『files』資料夾,所以目的地資料夾不一定要存在。

  17. Windows程式設計基本概念 My.Computer.FileSystem.DeleteFile() 刪除C槽test資料夾底下的『book.txt』文字檔,上面兩種刪除的差異在於,一種為直接刪除檔案,另一種會出現對話視窗讓使用者選擇是否要刪除檔案:

  18. Windows程式設計基本概念 My.Computer.FileSystem.FileExists() 判斷C槽test資料夾底下是否有『book.txt』檔案,如果book.txt存在,則回傳True,如果book.txt不存在則回傳False。 這個功能多半在我們想要從硬碟上開啟一個文字檔案(或Binary格式的檔案)、或是想要建立一個新的檔案時,先檢查該檔案是否存在。 事先檢查可以避免該檔案不存在時,我們直接開啟該檔案所發生的執行階段錯誤;或是同檔名的檔案已經存在,然後我們又企圖建立一個新的檔案時所發生的錯誤。

  19. Windows程式設計基本概念 My.Computer.FileSystem.FindInFiles() 查看C槽test資料夾底下,有沒有任何檔案的文字內容包含『chapter7』。如果有,則將其傳回。 目前我們測試過幾種檔案類型,包括Word檔、Excel檔、ppt檔、txt檔都可以正確讀取。 這是一個非常好用的函式,過去的VB並沒有提供,它提供了類似檔案總管的搜尋功能,可以幫我們輕鬆的完成全文檢索的功能。

  20. Windows程式設計基本概念 My.Computer.FileSystem.GetFileInfo() 取得c槽test資料夾底下的book.txt檔案訊息。上面程式碼中的『LastAccessTime』指的是檔案最後的存取時間。 程式碼中回傳的FileInfo物件,可用來表達一個檔案的資訊狀態,透過FileInfo物件可以用來取得該檔案的建立時間、大小…等資訊。

  21. Windows程式設計基本概念 My.Computer.FileSystem.GetFiles() 當我們想要取得某個資料夾底下,檔案名稱符合『*.bmp』格式的所有檔案(包含子資料夾),則可以用上面的程式碼。 其中參數『dirPath』指的是某個資料夾路徑(如C:\Windows)

  22. Windows程式設計基本概念 My.Computer.FileSystem.GetName() 使用My.Computer.FileSystem.GetName(path)會取得檔案路徑中的檔名部分,上面的範例中,傳回的值會是『book.txt』。

  23. Windows程式設計基本概念 My.Computer.FileSystem.GetParentPath() 使用My.Computer.FileSystem.GetParentPath(path)會取得去除檔名後的檔案路徑,上面的範例會取得『c:\test』。

  24. Windows程式設計基本概念 My.Computer.FileSystem.MoveFile() 上面的程式碼,會將c槽test資料夾底下的『book.txt』檔案移動到d槽的files的testFile資料夾底下,移動後c槽下面的book.txt檔案會被刪除。 其中展示了兩種常用的檔案移動方式,一種是設定若當目的地已經存在相同檔案名稱,則直接覆蓋;另一種則會先出現對話視窗,讓使用者選擇是否要覆蓋。

  25. Windows程式設計基本概念 My.Computer.FileSystem.RenameFile() 將c槽test資料夾底下的book.txt更名為『ch7.txt』。

  26. Windows程式設計基本概念 My.Computer.FileSystem.ReadAllBytes() 將c槽test資料夾底下的book.txt檔案,用My.Computer.FileSystem.ReadAllBytes() 讀入,得到一個byte陣列(buf)。 這種形式的存取方式,多半用在檔案為Binary形式的內容,例如圖形檔(.jpg, .gif)、執行檔(.exe)、或是編碼過後的特定格式檔案(.rar, .doc)…等。

  27. Windows程式設計基本概念 My.Computer.FileSystem.ReadAllText() 這段程式碼,是將c槽test資料夾底下的book.txt檔案,用My.Computer.FileSystem. ReadAllText () 讀入,得到一個String型別的字串(buffer)

  28. Windows程式設計基本概念 My.Computer.FileSystem.WriteAllText() 這一段程式碼功能是將文字存檔。ReadAllText與WriteAllText這兩個函式的預設編碼方式都是UTF-8,所以在這裡我們也必須指定編碼方式。

  29. Windows程式設計基本概念 My.Computer.FileSystem.WriteAllBytes() 將5000行『這是一份測試文件』這幾個字寫到c槽test資料夾底下的info.txt檔案中。上面這段程式碼,上半部是將『測試文件』這幾個字先轉成Binary形式,也就是Byte格式的陣列,然後再儲存到檔案info.txt當中。 下半部則是將『測試文件』這幾個字直接寫入C:\info1.txt檔案當中,您可以比較兩者實際執行後的結果,會發現在檔案大小上有著明顯的差異。

  30. Demo 小作家

  31. 列印功能

  32. Windows程式設計基本概念 .NET Framework 2.0中的列印控制項 用來在 Windows 架構應用程式中設定列印的頁面詳細資料。 用來選取印表機、選擇列印頁面以及決定其他與列印相關的設定。 PrintPreviewControl 是用來顯示在列印 PrintDocument 時會出現的外觀。 PrintDocument 實際負責列印功能,可用來設定列印內容及列印文件能力的屬性。它可以與 PrintDialog 元件一起用於控制與文件列印相關的所有事項。 PrintPreviewDialog 控制項是預先設定的對話方塊,用來顯示文件列印後的樣子。

  33. Windows程式設計基本概念 PageSetupDialog 基本功能:設定列印紙張格式。 使用時機:需要調整列印紙張的規格。 外觀:當PageSetupDialog被拖曳出來後,會出現在component tray。 PageSetupDialog可用來調整列印時紙張邊界的設定、紙張直印或橫印…等功能。

  34. Windows程式設計基本概念 PageSetupDialog 當我們使用PrintDocument這個控制項(物件)作為PageSetupDialog初始化的參數時,PrintDocument元件對於頁面的參數設定會隨著PageSetupDialog的設定而更動,所以我們無須另外撰寫程式碼設定更改後的數據: 我們可以發現,在Visual Basic 2005中的列印動作,是透過『PrintDocument』來進行,而我們則可以透過『PageSetupDialog』控制項,來設定『PrintDocument』的列印參數與狀態。

  35. Windows程式設計基本概念 PrintDialog 基本功能:列印的對話視窗。 使用時機:在列印之前,設定列印幾份、列印範圍等。 外觀:當PrintDialog被拖曳出來後,會出現在component tray。

  36. Windows程式設計基本概念 PrintDialog PrintDialog是列印對話視窗,與一般我們按下印表機後出現的對話視窗相同,可以調整列印範圍、選擇印表機…等。 使用PrintDialog1.ShowDialog()之前,我們一樣要先將PrintDocument指定給PrintDialog,作為PrintDialog的初始化版面設定: 『PrintDialog1』設定要列印文件為『PrintDocument1』 呼叫PrintDocument1的『Print方法』實際把文件列印出來。

  37. Windows程式設計基本概念 PrintDocument 基本功能:描述列印版面設置的物件。 使用時機:PrintDocument會動態的跟著PageSetupDialog的設定更改屬性值,也可以直接指定給PrintPreviewControl或PrintDialog,當作列印版面初始化的依據。您可以透過PrintDocument控制項來實際列印一份文件。 請注意,列印動作可透過『PrintDocument1.Print()』方法來完成,而要列印的內容,則是透過『PrintDocument1_PrintPage』事件當中的參數『e』來指定,並且以繪製的方式輸出到印表機上。

  38. Windows程式設計基本概念 PrintDocument 請注意,列印動作可透過『PrintDocument1.Print()』方法來完成,而要列印的內容,則是透過『PrintDocument1_PrintPage』事件當中的參數『e』來指定,並且以繪製的方式輸出到印表機上。

  39. Windows程式設計基本概念 PrintPreviewDialog 基本功能:預覽列印的對話視窗。 使用時機:提供使用者預覽的功能,查看文件列印後的狀況,排版適不適合。 外觀:當PrintPreviewDialog被拖曳出來後,會出現在component tray。

  40. Windows程式設計基本概念 PrintPreviewDialog 0091: '預覽列印ToolStripButton_Click 0092: Private Sub 預覽列印ToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 預覽列印ToolStripButton.Click 0093: '設定doc,取得要列印的文字 0094: doc = Me.TextBox1.Text 0095: '給定要預覽的文件格式 0096: Me.PrintPreviewDialog1.Document = Me.PrintDocument1 0097: '開啟預覽列印對話視窗 0098: Me.PrintPreviewDialog1.ShowDialog() 0099: End Sub

  41. 網路功能

  42. Windows程式設計基本概念 My.Computer.Network My.Computer.Network.DownloadFile("http://www.google.com.tw/images/hp0.gif", "C:\123.gif") 上面這行程式可以將Google網站的Logo圖檔下載至硬碟中,並儲存到C:\123.gif

  43. Windows程式設計基本概念 My.Computer.Network My.Computer.Network.DownloadFile(URL, "C:\1234.exe", "", "", True, 30, True, FileIO.UICancelOption.DoNothing) 此外,您也可以透過上面的指令碼,讓下載時顯示進度:

  44. Windows程式設計基本概念 My.Computer.Network 您可以透過底下的程式碼,將檔案上傳至ftp: 請注意其中的address參數,該參數要包含完整的路徑,如果FTP使用的是特定的port,則必須一併寫入,若該FTP有帳號密碼,也需要一併傳入。執行的結果如下:

  45. Windows程式設計基本概念 透過WebRequest與WebResponse取得網頁內容 WebRequest與WebResponse的命名空間在『System.Net』底下,所以在使用WebRequest或WebResponse之前,要先在程式碼的最前面加上『Imports System.Net』,如果沒有引用,也可以用『System.Net. WebRequest』或『System.Net. WebResponse』。 我們在程式上方寫『Imports System.Net』所以這裡才可以直接宣告。 簡單的說,我們可以透過WebRequest. Create方法,與遠端的網頁取得聯繫,然後再用WebRequest. GetResponse取得網頁的回應,並且用WebResponse接收。

  46. Windows程式設計基本概念 透過WebRequest與WebResponse取得網頁內容 接著用WebResponse. GetResponseStream讀取網際網路上的資料流,然後利用StreamReader的ReadToEnd方法,將資料流解讀成可用閱讀的文字:

  47. Windows程式設計基本概念 透過WebRequest與WebResponse取得網頁內容 例如,底下的程式碼將會顯示Goole首頁的HTML內容:

  48. Windows程式設計基本概念 利用HtmlDocument類別分析HTML碼 HtmlDocument是一個新的類別,通常都搭配WebBrowser控制項使用,用來存取WebBrowser上的網頁原始碼。比較特別的是,HtmlDocument的命名空間位在『System.Windows.Forms』底下,與一般連接網路的類別存在『System.Net』不同。 例如底下的例子,可以透過WebBrowser控制項取得網頁內容,並且透過HtmlDocument類別來處理網頁內容: 取得網頁資料。

  49. Windows程式設計基本概念 利用mshtml.IHTMLDocument2類別分析HTML碼 『mshtml.IHTMLDocument2』在用法上與HtmlDocument沒有太大的差別,HtmlDocument是透過WebBrowser. Document設定初始值,而mshtml.IHTMLDocument2除了可以用WebBrowser. Document設定初始值外,也可以用New的方式建立。

  50. Windows程式設計基本概念 利用WebClient類別存取網際網路資源 WebClient與WebRequest、WebResponse的命名空間相同,位在『System.Net』底下。 WebClient的常用方法:

More Related