《Visual Basic NET程序設(shè)計》課件第7章 文件系統(tǒng)_第1頁
《Visual Basic NET程序設(shè)計》課件第7章 文件系統(tǒng)_第2頁
《Visual Basic NET程序設(shè)計》課件第7章 文件系統(tǒng)_第3頁
《Visual Basic NET程序設(shè)計》課件第7章 文件系統(tǒng)_第4頁
《Visual Basic NET程序設(shè)計》課件第7章 文件系統(tǒng)_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

7.1文件的概念7.1.1文件文件是存儲在外部介質(zhì)上數(shù)據(jù)的集合,按名存取。通常,計算機程序?qū)?nèi)部數(shù)據(jù)保存到文件中的過程稱為寫(輸出)文件;將文件數(shù)據(jù)恢復(fù)成內(nèi)部數(shù)據(jù)的過程稱為讀(輸入)文件。7.1.2VB.NET文件分類按內(nèi)容分:程序文件和數(shù)據(jù)文件;按存儲信息的形式分:字符編碼文件(如ASCII碼文件)和二進制文件;按訪問模式分:順序文件、隨機文件和二進制文件。1.順序文件順序文件(SequentialFile)中記錄的寫入、存放和讀出順序都是一致的。在順序文件中,構(gòu)成文件的記錄不定長,記錄與記錄之間應(yīng)有明確的記錄分隔符(如逗號,換行符等)。每一個記錄包含一個或者多個數(shù)據(jù)項,由分隔符分隔。例如,下列文本序列:1,"張三";2,"李四";3,"王五";…;100,"lack"2.隨機文件隨機文件中的記錄有固定的大小,記錄與記錄間無須明確的分隔符。下列記錄序列: 0001張三;0002李四;0003王五;...;0100Jack可以構(gòu)成一個隨機文件,每條記錄長度為12個字節(jié)(數(shù)字編號占4個字節(jié),名字占8個字節(jié))。由于隨機文件的記錄定長,可直接定位記錄的開始和結(jié)束,如第n記錄從文件開始位置+(n-1)*12字節(jié)處開始。3.二進制文件任何一個文件都可以以二進制模式訪問。二進制文件在訪問方式上與隨機文件類似,可以看成是記錄長度為1個字節(jié)的隨機文件。7.1.3VB.NET的文件訪問存取文件一般包括三個步驟:打開文件、讀取文件和關(guān)閉文件。7.2順序文件7.2.1基本操作文件的基本操作包括打開、讀寫和關(guān)閉。要讀寫文件,必須先打開文件,指定一個系統(tǒng)緩沖區(qū)用于緩存讀寫數(shù)據(jù)。讀寫完成后要關(guān)閉文件,使系統(tǒng)能將緩沖區(qū)內(nèi)未保存數(shù)據(jù)寫入文件,避免文件損壞。1.打開文件VB.NET使用FileOpen函數(shù)打開文件,常用于打開順序文件的調(diào)用格式為:FileOpen(文件號,文件名,打開模式)表7-1文件打開模式例如,下列語句以O(shè)utput模式打開文件"c:\test_file.txt",意味著打開的目的是為了要輸出信息。FileOpen(1,"c:\test_file.txt",OpenMode.Output)文件打開后,可使用1號緩沖區(qū)對文件進行讀寫。2.讀寫文件(1)寫操作順序文件的寫操作有兩種輸出數(shù)據(jù)的格式:標(biāo)準(zhǔn)格式和緊湊格式。標(biāo)準(zhǔn)格式以長度為14個字符大小為單位的輸出域?qū)R輸出數(shù)據(jù)。輸出域邊界限制了數(shù)據(jù)項的起始位置(第n*14列,n=0,1,2,…),從而區(qū)分輸出數(shù)據(jù)項。緊湊格式則用分隔符(逗號)來分隔數(shù)據(jù)項。例如,輸出語句:Print(1,TAB(10),TAB(9),TAB(-2),"ThirdLinen",TAB(),"SecondZone")Write(1,TAB(10),TAB(9),TAB(-2),123,TAB(),"NextColurnn",True)(2)讀操作Input函數(shù)通常用來讀取用Write所寫的某個特定類型的數(shù)據(jù),即用逗號和回車換行符分隔良好的(字符)數(shù)據(jù)。DimtAsIntegerInput(1,t)3.關(guān)閉文件使用完文件后,應(yīng)及時將其關(guān)閉,避免有用信息丟失。文件關(guān)閉函數(shù)的格式為:FileClose(文件號[,文件號列表])其中,文件號是要關(guān)閉文件所在緩沖區(qū)的編號。FileClose函數(shù)可以關(guān)閉一個打開文件,也可以一次性關(guān)閉多個打開文件。例如,語句:FileClose(1,2)7.2.2順序文件的使用例7.1設(shè)計一個能將用戶輸入信息保存到順序文件的程序。程序運行界面如圖7-3所示。分析:要創(chuàng)建文件,應(yīng)使用FileOpen函數(shù)以O(shè)penMode.Output模式打開文件;要添加數(shù)據(jù),應(yīng)使用FileOpen函數(shù)以O(shè)penMode.Append模式打開文件。寫入數(shù)據(jù)項可以使用PrintLine或WriteLine函數(shù)。窗體界面設(shè)計使用3個LabelBox、3個TextBox、3個GroupBox、1個Button、4個RadioButton、1個StatusStrip(狀態(tài)工具欄),對StatusStrip添加ToolStripStatusLabel1。程序代碼如下:PublicClassForm1DimiAsIntegerPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickIfRadioButton1.Checked=TrueThenFileOpen(1,"d:\test_file.txt",OpenMode.Output)ElseFileOpen(1,"d:\test_file.txt",OpenMode.Append)EndIfButton1.Enabled=FalseButton2.Enabled=TrueToolStripStatusLabel1.Text="在1#緩存區(qū)打開文件d:\test_file.txt"i=0EndSubPrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.Clicki=i+1IfRadioButton4.Checked=TrueThenWriteLine(1,i,TextBox1.Text,TextBox2.Text,Val(TextBox3.Text))ElsePrintLine(1,i,TextBox1.Text,TextBox2.Text,Val(TextBox3.Text))EndIfButton3.Enabled=TrueToolStripStatusLabel1.Text="第"&i&"條記錄寫入文件d:\test_file.txt"EndSub

PrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton3.ClickFileClose(1)Button3.Enabled=FalseButton2.Enabled=FalseButton1.Enabled=Truei=0ToolStripStatusLabel1.Text="文件d:\test_file.txt已關(guān)閉"EndSub

PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadRadioButton1.Checked=TrueRadioButton3.Checked=TrueButton2.Enabled=FalseButton3.Enabled=FalseToolStripStatusLabel1.Text="就緒"EndSubEndClass例7.2設(shè)計一個能夠讀取例7.1中保存的文件信息的程序。程序運行界面如圖7-4所示。程序代碼如下:PublicClassForm1DimiAsIntegerPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickFileOpen(1,"d:\test_file.txt",OpenMode.Input)Button1.Enabled=FalseButton2.Enabled=TrueToolStripStatusLabel1.Text="在1#緩存區(qū)打開文件d:\test_file.txt"i=0EndSub

PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.ClickDimiAsInteger,nameAsString,sexAsString,ageAsIntegerIfNotEOF(1)=TrueThenInput(1,i)Input(1,name)Input(1,sex)Input(1,age)TextBox1.Text=nameTextBox2.Text=sexTextBox3.Text=ageToolStripStatusLabel1.Text="從文件d:\test_file.txt中讀取第"&i&"條記錄"ElseToolStripStatusLabel1.Text="文件d:\test_file.txt已經(jīng)讀到了結(jié)尾"TextBox1.Text=""TextBox2.Text=""TextBox3.Text=""Button2.Enabled=FalseEndIfButton3.Enabled=True

EndSub

PrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton3.ClickFileClose(1)Button3.Enabled=FalseButton2.Enabled=FalseButton1.Enabled=TrueToolStripStatusLabel1.Text="文件d:\test_file.txt已關(guān)閉"EndSub

PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadButton2.Enabled=FalseButton3.Enabled=FalseToolStripStatusLabel1.Text="就緒"EndSubEndClass7.3隨機文件與順序文件相比,隨機文件的記錄大小是固定的,容易計算出每條記錄在文件中的位置。隨機文件可以直接讀取任何一條記錄。1.記錄結(jié)構(gòu)隨機文件的記錄一般用類或Structrue結(jié)構(gòu)定義。例如,要使用與例7.1程序中類似的文件記錄,可用如下方法定義記錄結(jié)構(gòu),聲明記錄變量。StructurePersonalRecord ‘定義一個存儲個人信息的結(jié)構(gòu)PersonalRecord<VBFixedstring(12)>DimnameAsString<VBFixedstring(6)>DimsexAsStringDimageAsintegerEndStructureDimpersonAsPersonalRecord ‘用PseronalRecord聲明一個變量person,存儲個人信息2.打開文件常用于打開隨機文件的FileOpen函數(shù)調(diào)用格式為:FileOpen(文件號,文件名,OpenMode.Random,,,記錄長度)例如,下列語句以Random模式打開文件“d:\test_file.dat”,記錄長度為Len(person)。FileOpen(1,"d:\test_file.dat",OpenMode.Random,,,Len(person))3.讀寫文件用于隨機文件讀寫的相關(guān)函數(shù)(或過程)如表7-5所示,分別用FileGet和FilePut對文件進行讀寫。例如,要將Basic語言設(shè)計者Kemeny的信息寫到文件"d:\test_file.dat"中,可使用語句:="JohnG.Kemeny":person.sex="male":pserson.age=33FilePut(1,person,1)將person變量的內(nèi)容寫入文件的第1條記錄中。如果不指明記錄號,則FilePut語句將數(shù)據(jù)寫入當(dāng)前記錄。例如:FilePut(1,person) '將person變量的內(nèi)容寫入文件的當(dāng)前記錄讀取文件的信息,可直接用FileGet語句讀取指定記錄,讀取完成后,文件指針指向下一條記錄。例如:FileGet(1,person,1) ‘將第1條記錄讀到person變量中。MsgBox("BASIC的發(fā)明人是"&) ‘將顯示讀出的部分信息4.關(guān)閉文件隨機文件也用FileClose關(guān)閉。例如,要關(guān)閉前面打開的文件“d:\test_file.Dat”,可用語句:FileClose(1)。7.3.2隨機文件的使用例7.3設(shè)計使用隨機文件保存和讀取用戶輸入信息的程序。定義如下結(jié)構(gòu):StructurePersonRecord<VBFixedString(12)>DimnameAsString<VBFixedString(6)>DimsexAsStringDimageAsIntegerEndStructure然后用PersonRecord聲明變量person,用于保存記錄信息。DimpersonAsPersonRecord程序代碼如下:PublicClassForm1StructurePersonRecord'定義記錄結(jié)構(gòu)<VBFixedString(12)>DimnameAsString<VBFixedString(6)>DimsexAsStringDimageAsIntegerEndStructureDimpersonAsPersonRecord'聲明保存記錄的變量DimisFileOpenedAsBoolean'文件打開標(biāo)志

PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickIfisFileOpenedThenReturnFileOpen(1,"d:\test_file.txt",OpenMode.Random,,,Len(person))ToolStripStatusLabel1.Text="在1#緩存區(qū)打開文件d:\test_file.txt,記錄數(shù)為:"&LOF(1)/Len(person)isFileOpened=TrueEndSubPrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton3.ClickDimrecordNoAsLongIfNotisFileOpenedThenReturnrecordNo=Val(TextBox4.Text)IfrecordNo>0AndrecordNo<=LOF(1)/Len(person)Or(recordNo=-1AndNotEOF(1))ThenFileGet(1,person,recordNo)TextBox4.Text=recordNoTextBox1.Text=TextBox2.Text=person.sexTextBox3.Text=person.ageToolStripStatusLabel1.Text="讀取記錄"&recordNoEndIfEndSubPrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.ClickDimrecordNoAsLongIfNotisFileOpenedThenReturnrecordNo=Val(TextBox4.Text)=TextBox1.Textperson.sex=TextBox2.Textperson.age=Val(TextBox3.Text)IfrecordNo<>-1ThenFilePut(1,person)ToolStripStatusLabel1.Text="增加一條記錄"EndIfIfrecordNo>0AndrecordNo<=LOF(1)/Len(person)ThenFilePut(1,person,recordNo)ToolStripStatusLabel1.Text="寫入記錄"&recordNoEndIfEndSubPrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadTextBox4.Text=-1isFileOpened=FalseToolStripStatusLabel1.Text="就緒"EndSub

PrivateSubButton4_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton4.ClickIfNotisFileOpenedThenReturnFileClose(1)'關(guān)閉文件isFileOpened=FalseTextBox1.Text=""TextBox2.Text=""TextBox3.Text=""ToolStripStatusLabel1.Text="就緒"EndSubEndClass7.4VB.NET文件管理VB.NET使用基礎(chǔ)類庫中的Directory類和File類管理目錄和文件。這兩個類位于System.IO命名空間,提供了大量用于管理目錄和文件的方法。7.4.1目錄管理'創(chuàng)建目錄d:\test_dirSystem.IO.Directory.CreateDirectory("d:\test_dir")'創(chuàng)建子目錄d:\test_dir\test_sub_dirSystem.IO.Directory.CreateDirectory("c:\test_dir\test_sub_dir")例如,下列語句演示了Delete、Exists和Move方法的使用方式。'目錄C:\Test_Dir\Test_Sub_Dir是否存在?IfSystem.IO.Directory.Exists("C:\Test_Dir\Test_Sub_Dir")Then'刪除子目錄C:\Test_Dir\Test_Sub_DirSystem.IO.Directory.Delete("C:\Test_Dir\Test_Sub_Dir")’創(chuàng)建目錄"C:\Test_Dir\Test_Sub_Dir"System.IO.Directory.CreateDirectory("C:\Test_Dir\Test_Sub_Dir")‘移動子目錄"C:\Test_Sub_Dir"到"C:\Test_Dir\Test_Sub_Dir"System.IO.Directory.Move("C:\Test_Sub_Dir","C:\Test_Dir\Test_Sub_Dir")EndIf7.4.2文件管理下面給出Copy、Move、Exists和Delete方法的使用實例。IfSystem.IO.File.Exists("C:\.test_file.txt")Then '文件是否存在?'移動文件System.IO.File.Move("C:\test_file.txt","C:\test_Dir\test_Sub_Dir\test_file.txt")'復(fù)制文件System.IO.File.Copy("C:\test_Dir\test_Sub_Dir\test_file.txt","C:\test_file.txt")System.IO.File.Delete("C:\test_Dir\Test_Sub_Dir\test_file.txt") '刪除文件EndIf7.5綜合實例7.5.1問題及分析本節(jié)將設(shè)計一個類似Windows記事本的程序,稱為“簡易記事本”。程序的基本功能是顯示、編輯和保存文本文件。簡易記事本只有“文件”和“編輯”兩個菜單?!拔募辈藛伟ㄐ陆?、打開、保存和退出四個功能;“編輯”菜單則有剪切、復(fù)制和粘貼3個功能。7.5.2解決方案1.界面設(shè)計簡易記事本所需要的控件包括窗體、文本框、打開文件

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論