![程序語言新功能_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/2cce1e8e-1607-438f-81b7-dcbd5b7ab02f/2cce1e8e-1607-438f-81b7-dcbd5b7ab02f1.gif)
![程序語言新功能_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/2cce1e8e-1607-438f-81b7-dcbd5b7ab02f/2cce1e8e-1607-438f-81b7-dcbd5b7ab02f2.gif)
![程序語言新功能_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/2cce1e8e-1607-438f-81b7-dcbd5b7ab02f/2cce1e8e-1607-438f-81b7-dcbd5b7ab02f3.gif)
![程序語言新功能_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/2cce1e8e-1607-438f-81b7-dcbd5b7ab02f/2cce1e8e-1607-438f-81b7-dcbd5b7ab02f4.gif)
![程序語言新功能_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/2cce1e8e-1607-438f-81b7-dcbd5b7ab02f/2cce1e8e-1607-438f-81b7-dcbd5b7ab02f5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第9章9探索Visual Basic 2005程序語言新功能聲明:本章的解說與程序碼范例都是根據(jù)Visual Basic 2005 Express Edition Beta 2所撰寫的,任何信息在最終的發(fā)行版本中都可能會(huì)有所變動(dòng),特此聲明之。另外,本章的程序范例單獨(dú)存放于范例光盤內(nèi)之Ch9目錄下的Ch9項(xiàng)目中。為了讓大家先睹為快,微軟公司特別開放Visual Basic 2005 Express Edition Beta 2讓大家下載?;旧?,Visual Basic 2005的各項(xiàng)新功能已經(jīng)大致底定,在RTM版發(fā)行前不致有太大的變更。即使有所不同,也絕對是大同小異。不過仍然建議大家不要在實(shí)際
2、執(zhí)行日常工作的電腦上安裝Beta版,還是在Microsoft Virtual PC映像上執(zhí)行比較安全。Visual Basic 2005的程序語言變革重點(diǎn)包括My、XML注解及泛型。一些能夠彌補(bǔ)邏輯缺口的新程序語言語句,包括:Using、Continue與TryCast,以及 Global 關(guān)鍵字。另外還有一些結(jié)構(gòu)化的改良,包括屬性存取子存取范圍的變更、自定義事件存取子、部分型別類型以及應(yīng)用程序?qū)蛹?jí)事件。運(yùn)算符多載、轉(zhuǎn)換運(yùn)算符與IsNot運(yùn)算符也都是全新加入的。其他實(shí)用的變革還包括:Unsigned型別類型、菜單默認(rèn)實(shí)例、編譯器警告與明確數(shù)組界限。我想大家現(xiàn)在一定迫不及待想要深入了解Visua
3、l Basic 2005在程序語言方面的強(qiáng)化,現(xiàn)在就讓我們一起開始學(xué)習(xí)吧!本章將討論下列主題:n 從My談起n My.Application對象n My.Computer對象n 對象n 對象n 對象n 對象n 對象n 對象n 對象n 對象n 對象n 對象n 對象n My.Forms對象n My.Log對象n My.Request對象n My.Response對象n My.Resources對象n My.Settings對象n My.User對象n My.WebServices對象n Continue語句n IsNot運(yùn)算符n Using語句n 明確指定數(shù)組的0下限n 聲明一個(gè)擁有混合存取范圍的
4、屬性n Unsigned型別類型n Global關(guān)鍵字n TryCast關(guān)鍵字n 運(yùn)算符多載n 自定義事件n 應(yīng)用程序?qū)蛹?jí)事件9-1 從My談起.NET Framework既廣且深,其功能之強(qiáng)大與完整是任誰也不能否認(rèn)的,然而其眾多命名空間中大量數(shù)目的類,卻常常讓新手不知從何下手,總是必須花上一段時(shí)間才能熟悉他們所需之類的位置。這樣的過程,其實(shí)讓人覺得有點(diǎn)氣餒。為了解決學(xué)習(xí)上的問題,并具體提升開發(fā)人員的生產(chǎn)力,Visual Basic 2005提供了一項(xiàng)非常重要的新功能,它就是My。My 提供了常用 .NET Framework 類與函數(shù)的進(jìn)入點(diǎn),讓常用的功能唾手可得,并減少您必須撰寫的程序碼行
5、數(shù)。My的最頂層成員會(huì)被暴露成對象。每一個(gè)對象在運(yùn)作上就好比是一個(gè)命名空間或是擁有共用成員的類,并且會(huì)公開一組相關(guān)聯(lián)的成員。說穿了,My提供一條捷徑來讓您存取信息以及與應(yīng)用程序及其執(zhí)行階段環(huán)境相關(guān)聯(lián)的默認(rèn)對象實(shí)例。My的最頂層成員包括下列各項(xiàng):n Application n Computer n Usern Formsn Webservicesn Resources n Settings My到底有多好用呢?我們就通過一些簡單的范例來展現(xiàn)其便利之處。首先,假設(shè)我們要在Visual Basic 2005中播放一個(gè)音頻文件,欲達(dá)此目的,您不需要像過去一樣去使用DirectX或Win32 API調(diào)用
6、,您只需撰寫下面這一條語句即可:又例如,假設(shè)您要播放一個(gè)系統(tǒng)音頻,可以撰寫如下所示的語句:再舉一個(gè)例子,假設(shè)您要去驗(yàn)證與指定遠(yuǎn)程主機(jī)的連線性,可以采用下列寫法: MessageBox.Show(微軟的網(wǎng)站可以使用。) End IfEnd If從上面這三個(gè)簡例可以看出,顯然My不僅能夠使程序碼更加精簡,更重要的是,這是一種非常直觀的寫法,讓程序設(shè)計(jì)師非常容易去聯(lián)想與發(fā)掘所需的功能。談到這里,相信大家現(xiàn)在對My已經(jīng)產(chǎn)生不少好感,既然如此,我們就更進(jìn)一步去學(xué)習(xí)My的各大成員吧!9-2 My.Application對象由于My.Application對象提供了與目前應(yīng)用程序相關(guān)的屬性、事件與方法,因此
7、通過My.Application對象,我們可以輕易地去存取與目前應(yīng)用程序相關(guān)的各項(xiàng)信息。比方說,使用下面這一條語句即可顯示出應(yīng)用程序所采用的驗(yàn)證模式:大家必須了解,My.Application對象所公開的屬性都是與目前應(yīng)用程序或DLL相關(guān)的信息,您不能使用My.Application對象去變更任何系統(tǒng)層級(jí)的信息。此外,My.Application對象的成員能否使用也會(huì)因?yàn)閼?yīng)用程序的類型是Windows Form應(yīng)用程序或主控臺(tái)應(yīng)用程序而有所不同。特別值得一提的是,在My.Application對象之下還繼續(xù)公開了下列兩個(gè)對象:q 對象對象提供了用來取得應(yīng)用程序相關(guān)信息的屬性,比方說,版本號(hào)碼、
8、描述、載入的組件等等。對象所公開的某些屬性會(huì)返回應(yīng)用程序的組件信息。如果您想要設(shè)定應(yīng)用程序之組件的相關(guān)信息,必須使用圖9-1所示的“組件信息”對話框。對象的功能性與類有些類似,但是其范圍僅限于快速存取最常用的屬性。其他比如LoadedAssemblies屬性則會(huì)提供應(yīng)用程序目前的狀態(tài)。q 對象對象所提供的一個(gè)屬性(TraceSource)與兩個(gè)方法(WriteEntry與WriteException)能夠幫助您將事件與異常信息寫入至應(yīng)用程序的記錄聆聽監(jiān)聽項(xiàng)(Log Listeners)。對象提供一個(gè)非常直接的進(jìn)入點(diǎn)來讓您存取 .NET Framework的記錄服務(wù)。WriteEntry與Wri
9、teException方法會(huì)將訊息寫入至應(yīng)用程序的記錄聆聽監(jiān)聽項(xiàng)。這些聆聽監(jiān)聽項(xiàng)是在machine.config中設(shè)定的,但是其運(yùn)作行為可以被應(yīng)用程序的配置文件來加以覆寫。請大家注意,對象僅適用于Windows用戶端應(yīng)用程序。對于ASP.NET應(yīng)用程序而言,請使用My.Log對象。: 程序范例圖9-2所示者是程序范例DemoVB2005_1.vb的執(zhí)行畫面,它示范如何使用My.Application對象來取得應(yīng)用程序的相關(guān)信息。茲將程序碼列示如下:圖9-1圖9-2Private Sub btnGetAppCmdLineArgs_Click(_ ByVal sender As System.Ob
10、ject, ByVal e As System.EventArgs) _ Handles btnGetAppInfo.Click Dim sb As StringBuilder = New StringBuilder sb.Append(應(yīng)用程序的標(biāo)題:) sb.AppendLine() sb.Append(描述:) sb.AppendLine() sb.Append(產(chǎn)品名稱:) sb.AppendLine() sb.Append(公司名稱:) sb.AppendLine() sb.Append(著作權(quán):) sb.AppendLine() sb.Append(商標(biāo):) sb.AppendLi
11、ne() sb.Append(版本:) sb.AppendLine() sb.AppendLine(命令行光標(biāo):) For Each s As String In sb.AppendLine(s) Next sb.Append(驗(yàn)證模式:) sb.AppendLine() sb.Append(文化特性名稱:) sb.AppendLine() sb.Append(應(yīng)用程序組件文件的名稱:) sb.AppendLine() sb.Append(應(yīng)用程序儲(chǔ)存位置:) sb.AppendLine() sb.Append(對應(yīng)至進(jìn)程內(nèi)容的實(shí)際內(nèi)存數(shù)量:) sb.AppendLine() txtResul
12、t.AppendText(sb.ToString)End Sub9-3 My.Computer對象My.Computer對象能夠返回應(yīng)用程序所部署之電腦的相關(guān)信息,比如音頻、時(shí)鐘、鍵盤、文件系統(tǒng)等等。特別值得一提的是,在My.Computer對象之下還繼續(xù)公開了數(shù)個(gè)對象,接下來,我們要一一討論這些對象。附注:您可以使用屬性來取得電腦名稱。對象對象提供了下列三個(gè)非常便利的方法來讓我們播放音頻:q Play方法Play方法能夠播放一個(gè) .wav 聲音文件,它擁有下列四個(gè)多載版本: Play(ByVal location As String) Play(ByVal location As Strin
13、g, ByVal playMode As AudioPlayMode) Play(ByVal data As Byte(),ByVal playMode As AudioPlayMode) Play(ByVal stream As , _ ByVal playMode As AudioPlayMode)參數(shù)PlayMode型別類型是列舉型別類型AudioPlayMode,它用來決定播放模式,其成員與說明如表9-1所示。q PlaySystemSound方法借助于PlaySystemSound方法,我們可以非常容易播放某一個(gè)系統(tǒng)聲音。您傳遞給PlaySystemSound方法的參數(shù)必須是類的下列
14、共用成員之一。表9-1播放模式說明AudioPlayMode.Background以背景方式播放聲音,此舉使得調(diào)用程序碼能夠繼續(xù)執(zhí)行。AudioPlayMode.BackgroundLoop以背景方式播放聲音直到My.Computer.Autdio.Stop方法被調(diào)用為止,同樣的,此播放模式能夠讓調(diào)用程序碼繼續(xù)執(zhí)行。AudioPlayMode.WaitToComplete播放聲音并等到播放完畢之后,調(diào)用程序碼才會(huì)繼續(xù)執(zhí)行。AsteriskBeepExclamationHandQuestionq Stop方法如果您要停止播放先前使用Play方法所播放的背景聲音,請調(diào)用Stop方法。: 程序范例圖
15、9-3是程序范例DemoVB2005_2.vb的執(zhí)行畫面,它示范如何使用對象來播放聲音。設(shè)計(jì)技巧說明如下:圖9-3q 我們必須替菜單的Load事件過程撰寫下列程序碼,以便以AudioPlayMode列枚舉型別類型的常量名稱字符串?dāng)?shù)組作為下拉式清單方塊列表框cboAudioPlayMode的資料數(shù)據(jù)來源:Private Sub DemoVB2005_2_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load cboAudioPlayMode.DataSource = _ cboA
16、udioPlayMode.SelectedIndex = 1End Subq 當(dāng)用戶單擊【播放聲音】按鈕,就會(huì)執(zhí)行下列程序碼以便以用戶所指定的播放模式來播放所選取的聲音文件:Private Sub btnPlaySound_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnPlaySound.Click Try 決定聲音的播放模式。 開始播放聲音。 Catch ex As Exception MessageBox.Show(ex.Message) End TryEnd Subq 當(dāng)用戶單
17、擊【停止播放】按鈕,就會(huì)執(zhí)行下列程序碼以便停止播放目前正在以背景方式播放的聲音:Private Sub btnStopPlay_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnStopPlay.Click Try Catch ex As Exception MessageBox.Show(ex.Message) End TryEnd Sub對象對象最主要的用途就是讓開發(fā)人員更容易去使用剪貼簿,您可以使用對象的各個(gè)方法(如表9-2所列)來完成剪貼簿的處理操作。我們已經(jīng)在第4章的“4-54
18、剪貼簿的資料數(shù)據(jù)擷取與存入”一節(jié)中詳細(xì)介紹過剪貼簿,于此就不再浪費(fèi)篇幅說明。表9-2My.Computer.Clipboard對象的方法方法說明Clear清除剪貼簿。 ContainsAudio判斷剪貼簿是否內(nèi)含音頻資料數(shù)據(jù)。 ContainsData判斷剪貼簿是否內(nèi)含所指定之自定義格式的資料數(shù)據(jù)。 ContainsFileDropList判斷剪貼簿是否內(nèi)含一個(gè)FileDropList。比方說,以下的程序碼會(huì)判斷剪貼簿是否內(nèi)含一個(gè)FileDropList,如果確實(shí)存在的話,則將其集合中的路徑字符串一一添加至清單方塊列表框中:If My.Computer.Clipboard.ContainsFi
19、leDropList Then Dim filelist As _ System.Collections.Specialized.StringCollection filelist = My.Computer.Clipboard.GetFileDropList() For Each filePath As String In filelist lstFiles.Items.Add(filePath) NextEnd IfContainsImage判斷剪貼簿是否內(nèi)含一個(gè)影像。比方說,以下的程序碼會(huì)判斷剪貼簿是否存在一個(gè)影像,如果確實(shí)存在的話,就取得影像并將其顯示在PictureBox控件中:If
20、 My.Computer.Clipboard.ContainsImage() Then Dim grabpicture As System.Drawing.Image grabpicture = My.Computer.Clipboard.GetImage() PictureBox1.Image = grabpicture End If續(xù)表My.Computer.Clipboard對象的方法ContainsText判斷剪貼簿是否內(nèi)含文本或所指定格式的文本。以下面的程序碼而言,它會(huì)判斷剪貼簿中是否存在HTML文本,如果確實(shí)存在的話,就從剪貼簿中將其讀取出來: If My.Computer.Cli
21、pboard.ContainsText _ (System.Windows.Forms.TextDataFormat.Html) Then Dim clipText As String = _ My.Computer.Clipboard.GetText()End IfGetAudioStream從剪貼簿中返回一個(gè)音頻資料數(shù)據(jù)流。以下的程序碼示范如何從剪貼簿中提取出一個(gè)音頻資料數(shù)據(jù)流并播放它:If My.Computer.Clipboard.ContainsAudio Then Dim song As System.IO.Stream song = My.Computer.Clipboard.G
22、etAudioStream My.Computer.Audio.Play( _ song, AudioPlayMode.WaitToComplete) End IfGetData從剪貼簿中返回與指定格式相關(guān)的資料數(shù)據(jù)。 GetDataObject它會(huì)擷取目前在剪貼簿中的資料數(shù)據(jù)并將其以IDataObject返回。 GetFileDropList提取出剪貼簿中的FileDropList。 GetImage提取出剪貼簿中的影像。 GetText提取出剪貼簿中的文本。例如:Dim textOnClipboard As String = _ My.Computer.Clipboard.GetText(
23、)續(xù)表My.Computer.Clipboard對象的方法SetAudio將音頻資料數(shù)據(jù)寫入剪貼簿。以下面的程序碼而言,它會(huì)建立一個(gè)字節(jié)組數(shù)組musicReader,接著將Sound1.wav讀入其中,然后將其寫入剪貼簿:Dim musicReader As Byte()musicReader = _ My.Computer.FileSystem.ReadAllBytes(Sound1.wav)My.Computer.Clipboard.SetAudio(musicReader)SetData以指定的自定義格式將資料數(shù)據(jù)寫入剪貼簿。 SetDataObject將一個(gè)DataObject型別類型
24、的資料數(shù)據(jù)對象寫入剪貼簿。 SetFileDropList將一個(gè)FileDropList寫入剪貼簿。以下的程序碼會(huì)取得My Documents文件夾當(dāng)中的文件名稱集合,接著將它們轉(zhuǎn)換成一個(gè)FileDropList,然后將它寫入剪貼簿:Dim list As _ System.Collections.ObjectModel.ReadOnlyCollection( _ Of String)list = My.Computer.FileSystem.GetFiles _ (My.Computer.FileSystem.SpecialDirectories.MyDocuments)Dim listRe
25、ader As New _ System.Collections.Specialized.StringCollectionFor Each item As String In list listReader.Add(item)NextMy.Computer.Clipboard.SetFileDropList(listReader)SetImage將一個(gè)影像寫入剪貼簿。 SetText將文本寫入剪貼簿。對象通過對象的下列屬性,我們可以非常容易地去取得與時(shí)間相關(guān)的信息:q GmtTime屬性會(huì)以格林尼治標(biāo)準(zhǔn)時(shí)間(Greenwich Mean Time,GMT)來返回本機(jī)電腦上當(dāng)?shù)氐哪壳叭掌谂c時(shí)間。
26、屬性與屬性是完全相同的。q LocalTime屬性會(huì)返回本機(jī)電腦上當(dāng)?shù)氐哪壳叭掌谂c時(shí)間。屬性與System.DateTime. Now屬性是完全相同的。q TickCount屬性會(huì)返回系統(tǒng)啟動(dòng)后經(jīng)過的毫秒數(shù)。如果您要根據(jù)應(yīng)用程序執(zhí)行時(shí)間的長短來控制其運(yùn)作行為,TickCount屬性就顯得非常好用。TickCount屬性的值衍生自系統(tǒng)計(jì)時(shí)器,并且被儲(chǔ)存成32位帶正負(fù)號(hào)的整數(shù),因此如果系統(tǒng)持續(xù)執(zhí)行24.9天,耗用的時(shí)間會(huì)重新從零計(jì)算起。TickCount屬性只有當(dāng)系統(tǒng)在運(yùn)作時(shí)才會(huì)遞增,如果電腦進(jìn)入特定的省電模式(例如:待機(jī)或休眠狀態(tài)),它將會(huì)停止遞增。TickCount屬性與電腦的時(shí)鐘設(shè)定無關(guān)。屬
27、性與屬性是完全相同的。對象在Visual Basic 2005中要進(jìn)行文件系統(tǒng)的處理操作將是前所未有地簡易,此乃因?yàn)閷ο筇峁┝朔浅V苯?、無界限、易于發(fā)現(xiàn)、且易于使用的方式來執(zhí)行常用的文件系統(tǒng)操作,諸如復(fù)制、刪除、移動(dòng)以及更名文件與文件夾,或是讀取和寫入文件,全都可以通過對象來輕易完成。為了讓大家真正了解對象的好處,接下來我們將一一說明如何使用對象去輕易完成各項(xiàng)的文件與文件夾處理操作。9-7.1 取得磁盤信息您可以使用對象的下列成員來取得磁盤信息:q 屬性會(huì)返回一個(gè)內(nèi)含您電腦中所有邏輯磁盤之對象的只讀集合。如此一來,您可以針對此只讀集合中的每一個(gè)對象進(jìn)行處理,以便取得每一個(gè)邏輯磁盤的詳細(xì)信息。q
28、 如果您只是想要取得某一個(gè)邏輯磁盤的對象,請使用方法。: 程序范例1圖9-4所示者程序范例DemoVB2005_3.vb的執(zhí)行畫面,它示范如何結(jié)合使用屬性與對象來取得電腦中所有已就緒之邏輯磁盤的相關(guān)信息。程序碼如下所列,請?zhí)貏e注意我們?nèi)绾问褂脤ο蟮腎sReady屬性來判斷磁盤是否已經(jīng)就緒:圖9-4 導(dǎo)入命名空間Imports System.IOImports System.TextPrivate Sub btnGetDriveInfo_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnG
29、etDriveInfo.Click Dim sb As StringBuilder = New StringBuilder Dim getInfo As _ Try For Each info As DriveInfo In getInfo 判斷磁盤裝置是否就緒。 If info.IsReady Then sb.Append(磁盤代號(hào):) sb.AppendLine(info.Name) sb.Append(磁盤標(biāo)簽:) sb.AppendLine(info.VolumeLabel) sb.Append(磁盤類型:) sb.AppendLine() sb.Append(磁盤格式:) sb.Ap
30、pendLine(info.DriveFormat) sb.Append(磁盤大?。? sb.AppendLine() sb.Append(剩余空間:) sb.AppendLine() sb.AppendLine(-) End If Next Catch ex As Exception MessageBox.Show(ex.Message) End Try txtResult.Text = sb.ToStringEnd Sub: 程序范例2圖9-5所示者程序范例DemoVB2005_4.vb的執(zhí)行畫面,它允許用戶選取電腦上的某一個(gè)邏輯磁盤,然后列出該磁盤的相關(guān)信息。設(shè)計(jì)技巧重點(diǎn)說明如下:圖9-
31、5q 您必須在菜單的Load事件過程撰寫下列程序碼,以便將電腦上所有邏輯磁盤的名稱添加至下拉式清單方塊列表框中:Private Sub DemoVB2005_4_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Dim sb As StringBuilder = New StringBuilder Dim getInfo As _ For Each info As DriveInfo In getInfo NextEnd Subq 您必須替下拉式清單方塊列表框的Selec
32、tedIndexChanged事件過程撰寫下列程序碼,以便當(dāng)用戶選取某一個(gè)磁盤之后,就使用方法來根據(jù)該磁盤建立一個(gè)DriveInfo對象,以便取得該磁盤的相關(guān)信息:Private Sub cboDrives_SelectedIndexChanged( _ ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles cboDrives.SelectedIndexChanged txtResult.Clear() Dim sb As StringBuilder = New StringBuilder 判斷磁盤裝置是否就
33、緒。 If myDrive.IsReady Then sb.Append(磁盤代號(hào):) sb.AppendLine(myDrive.Name) Else MessageBox.Show(磁盤 & myDrive.Name & _ 尚未就緒,可能是尚未插入磁盤或光盤, & _ 亦或是本裝置根本不存在。) End If txtResult.Text = sb.ToStringEnd Sub9-7.2 讀取文本文件方法讓文本文件的讀取操作前所未有地簡易,它能夠直接讀取文本文件的內(nèi)容并將其以一個(gè)字符串返回。例如:Dim myTxtFileReader As String在讀取文件的時(shí)候還可以指定第二個(gè)
34、型別類型為的字節(jié)編碼參數(shù),如果您要讀取一個(gè)擁有延伸字節(jié)的文件,就需要指定字節(jié)編碼。比方說,假設(shè)您要讀取一個(gè)內(nèi)容為UTF32編碼的文本文件,可以這樣寫:Dim myFileReader As StringmyFileReader = _ (C:Test.txt, _ )方法會(huì)將所讀取之文本文件的內(nèi)容以一個(gè)字符串返回,但是如果您希望建立一個(gè)指向您所要讀取之文本文件的StreamReader對象,以便通過StreamReader對象多樣化的方法來讀取文本文件的話,請使用方法來打開文本文件。方法會(huì)打開文本文件并建立一個(gè)StreamReader對象來代表該文本文件。例如:Dim stringReader
35、 As StringstringReader = sr.ReadLine()MessageBox.Show(此文本文件的第一行是: & stringReader)sr.Close()附注:關(guān)于如何通過StreamReader對象來讀取文本文件的詳細(xì)說明,請參閱第6章。9-7.3 剖析文本文件正如大家所知道的,文本文件的內(nèi)容常常并非是單純的文章,其內(nèi)容很可能是以特定字節(jié)分隔或是固定寬度的字段資料數(shù)據(jù),尤其當(dāng)我們將資料數(shù)據(jù)庫資料數(shù)據(jù)表的資料數(shù)據(jù)記錄導(dǎo)出成文本文件的時(shí)候,更是經(jīng)常采用此格式。為了幫助大家順利讀取此類的文本文件,Visual Basic 2005特別推出方法,此方法會(huì)建立一個(gè)TextF
36、ieldParser對象,以便提供一條途徑來讓您輕易且有效率地讀取結(jié)構(gòu)化的文本文件。: 程序范例1圖9-6所示者是程序范例DemoVB2005_5.vb的執(zhí)行畫面,它示范如何使用方法去打開一個(gè)以逗號(hào)分隔字段內(nèi)容的文本文件,以便藉由TextFieldParser對象的輔助來順利將文本文件之各字段的內(nèi)容顯示在一個(gè)DataGridView控件中。茲將程序碼列示如下:以逗號(hào)分隔之文本文件的內(nèi)容順利顯示在DataGridView控件中這是一個(gè)以逗號(hào)分隔的文本文件,請注意,第一行是各字段的標(biāo)題。圖9-6Private Sub btnParseTextFiles_Click(ByVal sender As
37、System.Object, _ ByVal e As System.EventArgs) Handles btnParseTextFiles.Click 表示文件內(nèi)容是字節(jié)分隔。 定義文本文件的字節(jié)分隔符號(hào)。 myReader.Delimiters = New String() , DataGridView1.ColumnHeadersVisible = True 設(shè)定欄標(biāo)題樣式。 Dim columnHeaderStyle As New DataGridViewCellStyle() columnHeaderStyle.BackColor = Color.Beige columnHeade
38、rStyle.Font = New Font(Verdana, 10, FontStyle.Bold) DataGridView1.ColumnHeadersDefaultCellStyle = columnHeaderStyle Dim currentRow As String() Dim myRowCount As Integer = 1 Dim myColCount As Integer = 0 循環(huán)處理文本文件中的所有字段。 While Not myReader.EndOfData Try currentRow = myReader.ReadFields() If myRowCount
39、 = 1 Then For Each currentField As String In currentRow 動(dòng)態(tài)設(shè)定DataGridView控件的字段數(shù)目。 DataGridView1.ColumnCount = myColCount + 1 設(shè)定DataGridView控件各欄的標(biāo)題名稱。 DataGridView1.Columns(myColCount).Name = _ currentField myColCount += 1 Next Else End If Catch ex As MalformedLineException MessageBox.Show(ex.Message)
40、 End Try myRowCount += 1 End WhileEnd Sub: 程序范例2圖9-7所示者是程序范例DemoVB2005_6.vb的執(zhí)行畫面,它示范如何使用方法去打開一個(gè)內(nèi)容為固定字段寬度的文本文件,以便藉由TextFieldParser對象的輔助來順利將文本文件之各字段的內(nèi)容顯示在一個(gè)DataGridView控件中。茲將程序碼列示如下:Private Sub btnParseTextFiles_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnParseTextFi
41、les.Click 表示文件內(nèi)容是固定字段寬度。 定義各個(gè)字段的寬度。 myReader.SetFieldWidths(5, 10, -1) 循環(huán)處理文本文件中的所有字段。 While Not myReader.EndOfData Try Catch ex As MalformedLineException MessageBox.Show(ex.Message) End Try End WhileEnd Sub這是一個(gè)固定字段寬度的文本文檔,請注意,它并未內(nèi)含字段標(biāo)題。固定字段寬度的文本文件內(nèi)容順利顯示在DataGridView控件中圖9-79-7.4 寫入文本文件方法提供一種最直接的方式來將
42、文本資料數(shù)據(jù)(或是說字符串)寫入文本文件,如下所示者即是一例:C:Test.txt, 我是章立民, False)如果您所指定的文件并不存在,將會(huì)建立該文件。至于是否要覆寫文件中既存的文本,則由第三個(gè)參數(shù)來決定,F(xiàn)alse表示覆寫(此為默認(rèn)值),True表示添加在既存的內(nèi)容之后。其實(shí)您還可以指定第四個(gè)型別類型為System.Text.Encoding的字節(jié)編碼參數(shù),如果沒有指定的話,默認(rèn)將使用UTF-8。方法雖然直接又便利,但是或許您希望建立一個(gè)指向您所要寫入資料數(shù)據(jù)之文本文件的StreamWriter對象,以便通過StreamWriter對象多樣化的方法來寫入文本文件。欲達(dá)此目的,請使用方法來
43、寫入文本文件。例如:sw.WriteLine(大家好!)sw.Write(非常感謝大家的支持.)sw.WriteLine(敬請繼續(xù)給予批評指教)sw.Flush()sw.Close()附注:關(guān)于如何通過StreamWriter對象來寫入文本文件的詳細(xì)說明,請參閱第6章。9-7.5 讀取二進(jìn)制文件方法能夠讀取一個(gè)二進(jìn)制文件并將所讀取的內(nèi)容返回成一個(gè)字節(jié)組數(shù)組。圖9-8所示者是程序范例DemoVB2005_7.vb的執(zhí)行畫面,本范例的重點(diǎn)在于,由于方法會(huì)直接返回所讀取之二進(jìn)制文件的字節(jié)組數(shù)組,因此使得程序碼更加精簡,茲列示如下:圖9-8 根據(jù)Byte數(shù)組來建立一個(gè)MemoryStream對象。Di
44、m buffer As New MemoryStream(myBinaryData) 將圖形文件的二進(jìn)制資料數(shù)據(jù)讀入一個(gè)Image對象中, 以便將其顯示于PictureBox控件中。PictureBox1.Image = Image.FromStream(buffer)9-7.6 寫入二進(jìn)制文件您覺得要將資料數(shù)據(jù)寫入二進(jìn)制文件很困難且繁瑣嗎?從現(xiàn)在開始,一切將變得如此簡易,因?yàn)榉椒軌蛑苯訉⒁粋€(gè)字節(jié)組數(shù)組中的資料數(shù)據(jù)寫入一個(gè)文件中。如果所指定的文件并不存在,它還會(huì)自動(dòng)建立該文件。以下面的程序碼而言,表示將從圖文件Test1.jpg讀取所得的影像資料數(shù)據(jù)寫入圖文件Test2.jpg中:9-7.7
45、 取得目錄信息通過對象的下列屬性與方法,您將能夠以更直觀且快速的方式來取得磁盤中的目錄信息:q CurrentDirectory屬性能夠用來取得或設(shè)定應(yīng)用程序的目前目錄。q 方法能夠判斷所指定的目錄是否存在。一般來說,當(dāng)我們針對特定目錄執(zhí)行相關(guān)處理之前,都會(huì)先判斷該目錄是否存在,例如: End Ifq CombinePath方法是一個(gè)非常實(shí)用的方法,它能夠?qū)蓚€(gè)路徑組合起來,接著加入遺漏的斜線字符或去除額外的斜線字符之后,返回一個(gè)合理的路徑。這次的智慧型功能,將可替程序設(shè)計(jì)師解決不少麻煩。舉例來說,以下面的程序碼而言,CombinePath方法將會(huì)替目錄路徑與文件名稱之間加上一個(gè)斜線而返回路徑
46、C:My DocumentsMy PicturesPicture.jpg: (C:My DocumentsMy Pictures, Picture.jpg)又以下面的程序碼而言,CombinePath方法會(huì)根據(jù)第二個(gè)路徑開頭的 . 而上移一層目錄之后再返回組合后的路徑C:Dir1Dir2Dir4Dir5File.txt:Dim myFullPath As String (C:Dir1Dir2Dir3, .Dir4Dir5File.txt)q 方法會(huì)取得指定目錄中之所有子目錄的路徑名稱然后將它們以一個(gè)只讀的字符串集合返回。q 方法會(huì)返回您所指定之路徑的對象。q 方法會(huì)返回您所指定之路徑的父路徑。
47、以下面的程序碼而言,將會(huì)返回路徑C:TempData:Dim strPath As String9-7.8 取得文件信息通過對象的下列方法,您將可以快速取得文件的相關(guān)信息:q 方法能夠判斷所指定的文件是否存在。例如:If Then MessageBox.Show(文件存在)Else MessageBox.Show(文件不存在)End Ifq 方法會(huì)返回您所指定之文件的對象。q 方法是一個(gè)非常實(shí)用的方法,它會(huì)返回您所指定之路徑中的文件名稱。比方說,以下面的程序碼而言,它會(huì)返回Test.txt:Dim MyFileName As Stringq 方法會(huì)取得您所指定之目錄中的所有文件名稱,然后將它們
48、以一個(gè)只讀的字符串集合返回。q 是一個(gè)非常重要、方便且又強(qiáng)大的方法,它能夠在指定的目錄中找出文件內(nèi)容中內(nèi)含特定文本的文件,然后將這些文件名稱以一個(gè)只讀的字符串集合返回。您還可以決定是否要區(qū)分大小寫,指定搜尋的范圍,甚至可以指定所要搜尋的文件類型。方法擁有下列兩個(gè)多載版本:FindInFiles( _ ByVal directory As String, _ ByVal containsText As String, _ ByVal ignoreCase As Boolean, _ ByVal searchType As SearchOptionFindInFiles( _ ByVal dire
49、ctory As String, _ ByVal containsText As String, _ ByVal ignoreCase As Boolean, _ ByVal searchType As SearchOption, _ ByVal fileWildCards其中參數(shù)directory用來指定您所要搜尋的目錄;參數(shù)containsText用來指定您所要搜尋的文本;參數(shù)ignoreCase用來決定是否要區(qū)分大小寫;參數(shù)searchType用來指定搜尋的范圍,如果您只是要搜尋所指定的目錄但是不搜尋該目錄之下的子目錄,請將參數(shù)searchType設(shè)定成SearchOption. Sea
50、rchTopLevelOnly,但是如果您希望搜尋所指定的目錄以及該目錄之下所有的子目錄,請將searchType設(shè)定成SearchOption. SearchAllSubDirectories;最后一個(gè)參數(shù)fileWildCards是用來指定搜尋的文件類型。q My.Computer.FileSystem.GetTempFileName方法會(huì)在磁盤上建立一個(gè)惟一名稱且零字節(jié)大小的臨時(shí)文件,并返回該臨時(shí)文件的完整路徑。: 程序范例圖9-9所示者是程序范例DemoVB2005_8.vb的執(zhí)行畫面,它示范如何使用方法于指定的磁盤目錄中去搜尋出內(nèi)含您所指定之文本的文件。相關(guān)程序碼撰寫于【開始搜尋】按
51、鈕的Click事件過程中,列示如下:圖9-9Private Sub btnSearch_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnSearch.Click If txtTarget.Text = String.Empty Then MessageBox.Show(您必須輸入所要搜尋的文本。) txtTarget.Focus() Exit Sub End If Dim frmStatusMessage As New frmStatus frmStatusMessage.Show(搜
52、尋中.請稍候.) mySearchDirectory, _ chkIgnoreCase.Checked, _ mySearchOption) frmStatusMessage.Close() If list.Count 0 Then For Each name As String In list Next Else MessageBox.Show(找不到有任何文件內(nèi)含您所指定的文本。) End IfEnd Sub9-7.9 目錄維護(hù)操作通過對象的下列方法,您將可以快速完成各種目錄維護(hù)操作:q 方法能夠讓您快速完成目錄的建立操作。q 方法能夠讓您快速完成目錄的刪除操作,它擁有下列三個(gè)多載版本:D
53、eleteDirectory( _ ByVal directory As String, _ ByVal onDirectoryNotEmpty As DeleteDirectoryOption)DeleteDirectory( _ ByVal directory As String, _ ByVal showUI As UIOption, _ ByVal recycle As RecycleOption)DeleteDirectory( _ ByVal directory As String, _ ByVal showUI As UIOption, _ ByVal recycle As RecycleOption, _ By
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年河北省唐山市高一上學(xué)期期中考試歷史試卷
- 2025年債務(wù)糾紛導(dǎo)致離婚協(xié)議書策劃模板
- 2025年企業(yè)暫時(shí)性停止勞動(dòng)合同樣本
- 2025年策劃復(fù)婚關(guān)系解除協(xié)議書樣本
- 2025年滌綸短纖項(xiàng)目申請報(bào)告模稿
- 2025年農(nóng)產(chǎn)品加工與合作協(xié)議書
- 2025年水蘇糖項(xiàng)目立項(xiàng)申請報(bào)告模板
- 建筑工地外部協(xié)作單位安全合作協(xié)議書
- 2025年信息技術(shù)服務(wù)合同續(xù)簽
- 2025年住宅區(qū)物品存放室租賃合同范文
- 教師培訓(xùn)校園安全工作課件校園安全管理培訓(xùn)課程教學(xué)
- 初中七 八年級(jí)生物思維導(dǎo)圖大全 張
- 婆媳關(guān)系證明
- 江蘇宿遷家鄉(xiāng)介紹旅游課件
- 莎士比亞十四行詩之十八課件
- 幼兒園中班語言《拼小人》課件
- 文化差異與跨文化交際課件(完整版)
- 臭和味檢測原始記錄表
- 變壓器檢修風(fēng)險(xiǎn)分析及管控措施
- 勞務(wù)派遣公司介紹ppt課件(PPT 35頁)
- 紀(jì)檢監(jiān)察機(jī)關(guān)派駐機(jī)構(gòu)工作規(guī)則PPT
評論
0/150
提交評論