510 likes | 708 Views
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
E N D
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時間相對的縮短,產量當然也就提高了。
Windows程式設計基本概念 My.Computer.FileSystem.CopyDirectory()
Windows程式設計基本概念 My.Computer.FileSystem.CreateDirectory()
Windows程式設計基本概念 My.Computer.FileSystem.CurrentDirectory()
Windows程式設計基本概念 My.Computer.FileSystem.DeleteDirectory()
Windows程式設計基本概念 My.Computer.FileSystem.DirectoryExists() 判斷C槽下是否有test資料夾,如果C槽底下有test資料夾,則回傳True,如果test資料夾不存在則回傳False。
Windows程式設計基本概念 My.Computer.FileSystem.GetDirectories() 搜尋在c槽的test資料夾底下,有沒有資料夾是以『文件』結尾的。如果c槽的test資料夾底下有『書籍文件、文件暫存區、資料文件檔』這三個資料夾,則會讀出『c:\test\書籍文件』這個路徑。
Windows程式設計基本概念 My.Computer.FileSystem.GetDirectoryInfo() 指令『GetDirectoryInfo』將會傳回指定的資料夾資訊,回傳值以『DirectoryInfo』物件呈現,上面的程式碼讀取c槽的test資料夾訊息,並回傳給DirectoryInfo物件(名為dirInfo),而『dirInfo .CreationTime』則是取回test資料夾的建立時間。
Windows程式設計基本概念 My.Computer.FileSystem.MoveDirectory() 程式碼將c槽底下的test資料夾移動到d槽的files的testFile,移動後c槽下面的test資料夾會被刪除。底下為兩種常用確認移動的方式,一種是直接設定當目的地已經存在同名資料夾,就直接覆蓋;另一種是出現對話視窗,讓使用者選擇是否要覆蓋。
Windows程式設計基本概念 My.Computer.FileSystem.RenameDirectory() 程式碼將c槽下面的test資料夾更名為『BookExamples』。
Windows程式設計基本概念 My.Computer.FileSystem.SpecialDirectories() 在系統當中,有一些特殊的常用資料夾,例如『我的文件』、『Program Files』…等。這些資料夾的位置並不一定是我們熟悉的C:\…,因為使用者可以將系統安裝在不同的硬碟(例如:D:\),同時像『我的文件』這類的資料夾,還會因為該電腦目前登入的是不同的使用者而有不同的位置,因此該資料夾的位置可能不確定。 此函式之功能,則在傳回正確的資料夾位置,以讓我們在程式碼中可以取得正確的路徑加以運作。
Windows程式設計基本概念 My.Computer.FileSystem.Drives() 取得電腦上磁碟集合後,可以取得個別的磁碟訊息。每個人電腦的作業環境不同,因此有可能會讀取到不一樣的磁碟內容,筆者的作業環境中有三個磁碟,執行下面這一段程式碼時,第一筆會讀取到的磁碟資料為『C:\ 』的磁碟格式為FAT32;第二筆為『D:\ 』的磁碟格式為:NTFS;最後是E槽光碟機,在還沒有放入光碟片,會引發『裝置未就緒』的錯誤訊息。
Windows程式設計基本概念 My.Computer.FileSystem.GetDriveInfo() DriveInfo物件,可用來表達一個邏輯磁碟機的狀態,也可以透過DriveInfo物件的屬性來取得該磁碟機的可用空間等資訊。上面的程式碼為取得c槽磁碟訊息後,讀出c槽可用空間的大小。
Windows程式設計基本概念 My.Computer.FileSystem.CopyFile() 將C槽test資料夾底下的『book.txt』文字檔,複製到D槽files資料夾底下;當D槽下面沒有『files』資料夾時,程式會自動建立一個『files』資料夾,所以目的地資料夾不一定要存在。
Windows程式設計基本概念 My.Computer.FileSystem.DeleteFile() 刪除C槽test資料夾底下的『book.txt』文字檔,上面兩種刪除的差異在於,一種為直接刪除檔案,另一種會出現對話視窗讓使用者選擇是否要刪除檔案:
Windows程式設計基本概念 My.Computer.FileSystem.FileExists() 判斷C槽test資料夾底下是否有『book.txt』檔案,如果book.txt存在,則回傳True,如果book.txt不存在則回傳False。 這個功能多半在我們想要從硬碟上開啟一個文字檔案(或Binary格式的檔案)、或是想要建立一個新的檔案時,先檢查該檔案是否存在。 事先檢查可以避免該檔案不存在時,我們直接開啟該檔案所發生的執行階段錯誤;或是同檔名的檔案已經存在,然後我們又企圖建立一個新的檔案時所發生的錯誤。
Windows程式設計基本概念 My.Computer.FileSystem.FindInFiles() 查看C槽test資料夾底下,有沒有任何檔案的文字內容包含『chapter7』。如果有,則將其傳回。 目前我們測試過幾種檔案類型,包括Word檔、Excel檔、ppt檔、txt檔都可以正確讀取。 這是一個非常好用的函式,過去的VB並沒有提供,它提供了類似檔案總管的搜尋功能,可以幫我們輕鬆的完成全文檢索的功能。
Windows程式設計基本概念 My.Computer.FileSystem.GetFileInfo() 取得c槽test資料夾底下的book.txt檔案訊息。上面程式碼中的『LastAccessTime』指的是檔案最後的存取時間。 程式碼中回傳的FileInfo物件,可用來表達一個檔案的資訊狀態,透過FileInfo物件可以用來取得該檔案的建立時間、大小…等資訊。
Windows程式設計基本概念 My.Computer.FileSystem.GetFiles() 當我們想要取得某個資料夾底下,檔案名稱符合『*.bmp』格式的所有檔案(包含子資料夾),則可以用上面的程式碼。 其中參數『dirPath』指的是某個資料夾路徑(如C:\Windows)
Windows程式設計基本概念 My.Computer.FileSystem.GetName() 使用My.Computer.FileSystem.GetName(path)會取得檔案路徑中的檔名部分,上面的範例中,傳回的值會是『book.txt』。
Windows程式設計基本概念 My.Computer.FileSystem.GetParentPath() 使用My.Computer.FileSystem.GetParentPath(path)會取得去除檔名後的檔案路徑,上面的範例會取得『c:\test』。
Windows程式設計基本概念 My.Computer.FileSystem.MoveFile() 上面的程式碼,會將c槽test資料夾底下的『book.txt』檔案移動到d槽的files的testFile資料夾底下,移動後c槽下面的book.txt檔案會被刪除。 其中展示了兩種常用的檔案移動方式,一種是設定若當目的地已經存在相同檔案名稱,則直接覆蓋;另一種則會先出現對話視窗,讓使用者選擇是否要覆蓋。
Windows程式設計基本概念 My.Computer.FileSystem.RenameFile() 將c槽test資料夾底下的book.txt更名為『ch7.txt』。
Windows程式設計基本概念 My.Computer.FileSystem.ReadAllBytes() 將c槽test資料夾底下的book.txt檔案,用My.Computer.FileSystem.ReadAllBytes() 讀入,得到一個byte陣列(buf)。 這種形式的存取方式,多半用在檔案為Binary形式的內容,例如圖形檔(.jpg, .gif)、執行檔(.exe)、或是編碼過後的特定格式檔案(.rar, .doc)…等。
Windows程式設計基本概念 My.Computer.FileSystem.ReadAllText() 這段程式碼,是將c槽test資料夾底下的book.txt檔案,用My.Computer.FileSystem. ReadAllText () 讀入,得到一個String型別的字串(buffer)
Windows程式設計基本概念 My.Computer.FileSystem.WriteAllText() 這一段程式碼功能是將文字存檔。ReadAllText與WriteAllText這兩個函式的預設編碼方式都是UTF-8,所以在這裡我們也必須指定編碼方式。
Windows程式設計基本概念 My.Computer.FileSystem.WriteAllBytes() 將5000行『這是一份測試文件』這幾個字寫到c槽test資料夾底下的info.txt檔案中。上面這段程式碼,上半部是將『測試文件』這幾個字先轉成Binary形式,也就是Byte格式的陣列,然後再儲存到檔案info.txt當中。 下半部則是將『測試文件』這幾個字直接寫入C:\info1.txt檔案當中,您可以比較兩者實際執行後的結果,會發現在檔案大小上有著明顯的差異。
Demo 小作家
Windows程式設計基本概念 .NET Framework 2.0中的列印控制項 用來在 Windows 架構應用程式中設定列印的頁面詳細資料。 用來選取印表機、選擇列印頁面以及決定其他與列印相關的設定。 PrintPreviewControl 是用來顯示在列印 PrintDocument 時會出現的外觀。 PrintDocument 實際負責列印功能,可用來設定列印內容及列印文件能力的屬性。它可以與 PrintDialog 元件一起用於控制與文件列印相關的所有事項。 PrintPreviewDialog 控制項是預先設定的對話方塊,用來顯示文件列印後的樣子。
Windows程式設計基本概念 PageSetupDialog 基本功能:設定列印紙張格式。 使用時機:需要調整列印紙張的規格。 外觀:當PageSetupDialog被拖曳出來後,會出現在component tray。 PageSetupDialog可用來調整列印時紙張邊界的設定、紙張直印或橫印…等功能。
Windows程式設計基本概念 PageSetupDialog 當我們使用PrintDocument這個控制項(物件)作為PageSetupDialog初始化的參數時,PrintDocument元件對於頁面的參數設定會隨著PageSetupDialog的設定而更動,所以我們無須另外撰寫程式碼設定更改後的數據: 我們可以發現,在Visual Basic 2005中的列印動作,是透過『PrintDocument』來進行,而我們則可以透過『PageSetupDialog』控制項,來設定『PrintDocument』的列印參數與狀態。
Windows程式設計基本概念 PrintDialog 基本功能:列印的對話視窗。 使用時機:在列印之前,設定列印幾份、列印範圍等。 外觀:當PrintDialog被拖曳出來後,會出現在component tray。
Windows程式設計基本概念 PrintDialog PrintDialog是列印對話視窗,與一般我們按下印表機後出現的對話視窗相同,可以調整列印範圍、選擇印表機…等。 使用PrintDialog1.ShowDialog()之前,我們一樣要先將PrintDocument指定給PrintDialog,作為PrintDialog的初始化版面設定: 『PrintDialog1』設定要列印文件為『PrintDocument1』 呼叫PrintDocument1的『Print方法』實際把文件列印出來。
Windows程式設計基本概念 PrintDocument 基本功能:描述列印版面設置的物件。 使用時機:PrintDocument會動態的跟著PageSetupDialog的設定更改屬性值,也可以直接指定給PrintPreviewControl或PrintDialog,當作列印版面初始化的依據。您可以透過PrintDocument控制項來實際列印一份文件。 請注意,列印動作可透過『PrintDocument1.Print()』方法來完成,而要列印的內容,則是透過『PrintDocument1_PrintPage』事件當中的參數『e』來指定,並且以繪製的方式輸出到印表機上。
Windows程式設計基本概念 PrintDocument 請注意,列印動作可透過『PrintDocument1.Print()』方法來完成,而要列印的內容,則是透過『PrintDocument1_PrintPage』事件當中的參數『e』來指定,並且以繪製的方式輸出到印表機上。
Windows程式設計基本概念 PrintPreviewDialog 基本功能:預覽列印的對話視窗。 使用時機:提供使用者預覽的功能,查看文件列印後的狀況,排版適不適合。 外觀:當PrintPreviewDialog被拖曳出來後,會出現在component tray。
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
Windows程式設計基本概念 My.Computer.Network My.Computer.Network.DownloadFile("http://www.google.com.tw/images/hp0.gif", "C:\123.gif") 上面這行程式可以將Google網站的Logo圖檔下載至硬碟中,並儲存到C:\123.gif
Windows程式設計基本概念 My.Computer.Network My.Computer.Network.DownloadFile(URL, "C:\1234.exe", "", "", True, 30, True, FileIO.UICancelOption.DoNothing) 此外,您也可以透過上面的指令碼,讓下載時顯示進度:
Windows程式設計基本概念 My.Computer.Network 您可以透過底下的程式碼,將檔案上傳至ftp: 請注意其中的address參數,該參數要包含完整的路徑,如果FTP使用的是特定的port,則必須一併寫入,若該FTP有帳號密碼,也需要一併傳入。執行的結果如下:
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接收。
Windows程式設計基本概念 透過WebRequest與WebResponse取得網頁內容 接著用WebResponse. GetResponseStream讀取網際網路上的資料流,然後利用StreamReader的ReadToEnd方法,將資料流解讀成可用閱讀的文字:
Windows程式設計基本概念 透過WebRequest與WebResponse取得網頁內容 例如,底下的程式碼將會顯示Goole首頁的HTML內容:
Windows程式設計基本概念 利用HtmlDocument類別分析HTML碼 HtmlDocument是一個新的類別,通常都搭配WebBrowser控制項使用,用來存取WebBrowser上的網頁原始碼。比較特別的是,HtmlDocument的命名空間位在『System.Windows.Forms』底下,與一般連接網路的類別存在『System.Net』不同。 例如底下的例子,可以透過WebBrowser控制項取得網頁內容,並且透過HtmlDocument類別來處理網頁內容: 取得網頁資料。
Windows程式設計基本概念 利用mshtml.IHTMLDocument2類別分析HTML碼 『mshtml.IHTMLDocument2』在用法上與HtmlDocument沒有太大的差別,HtmlDocument是透過WebBrowser. Document設定初始值,而mshtml.IHTMLDocument2除了可以用WebBrowser. Document設定初始值外,也可以用New的方式建立。
Windows程式設計基本概念 利用WebClient類別存取網際網路資源 WebClient與WebRequest、WebResponse的命名空間相同,位在『System.Net』底下。 WebClient的常用方法: