文件的概念及其使用方法是VB程序設(shè)計知識點梳理匯總_第1頁
文件的概念及其使用方法是VB程序設(shè)計知識點梳理匯總_第2頁
文件的概念及其使用方法是VB程序設(shè)計知識點梳理匯總_第3頁
文件的概念及其使用方法是VB程序設(shè)計知識點梳理匯總_第4頁
文件的概念及其使用方法是VB程序設(shè)計知識點梳理匯總_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第7章文件通過前幾章的學(xué)習(xí),使我們了解,利用VB可以編寫一些用于科學(xué)計算、圖形處理等方面的程序。不僅如此,VB還廣泛地應(yīng)用于編制如人事、財務(wù)、生產(chǎn)、教學(xué)等各方面的管理程序,在這類應(yīng)用中,通常需要處理大量不同類型的數(shù)據(jù)信息,而這些數(shù)據(jù)信息常常需要獨立存儲在某種介質(zhì)上(如磁盤等),以便需要時通過程序來加工處理,這種獨立存儲的數(shù)據(jù)集合就稱為文件。因此,掌握文件的概念及其使用方法是VB程序設(shè)計的重要內(nèi)容之一。7.1與文件操作有關(guān)的控件在Windows應(yīng)用程序中打開文件或保存文件時,通常需要打開一個對話框,用于選擇文件所在的驅(qū)動器(盤)、文件夾(目錄)、文件名。在VB中,使用盤驅(qū)動器列表框(DriveListBox)、目錄路徑列表框(DirListBox)以及文件列表框(FileListBox)這3種控件的組合,可以創(chuàng)建類似Windows資源管理器的文件操作對話框,用于選擇文件。7.1.1盤驅(qū)動器列表框控件盤驅(qū)動器列表框控件用于顯示驅(qū)動器列表,工具箱中該控件圖標(biāo)為。該控件缺省的名稱為:Drive1、Drive2、……=1\*GB1⒈盤驅(qū)動器列表框控件常用屬性⑴Drive屬性(字符串類型)用來設(shè)置當(dāng)前驅(qū)動器或返回所選擇的驅(qū)動器名。Drive屬性只能在程序運行時賦值,而不能通過屬性窗口設(shè)置。為驅(qū)動器列表框的Drive屬性賦值的語句格式為:<盤驅(qū)動器列表框名>.Drive[=驅(qū)動器名]格式中的“驅(qū)動器名”為指定的驅(qū)動器,也就是說使該驅(qū)動器成為當(dāng)前驅(qū)動器;如果省略,則不改變當(dāng)前驅(qū)動器。如果所指定的驅(qū)動器在系統(tǒng)中不存在,則產(chǎn)生錯誤。程序運行時若選擇驅(qū)動器,則Drive屬性值改寫為所選擇的驅(qū)動器名。如運行時單擊驅(qū)動器列表框控件drive1中D:盤圖標(biāo),則drive1.drive的值為"d:"。值得注意的是:盤驅(qū)動器列表框中顯示的驅(qū)動器名都是由系統(tǒng)自動生成的,用戶只能通過列表框選擇使用,不可以對Drive控件使用AddItem、RemoveItem等方法添加或刪除列表項。⑵List屬性(字符串?dāng)?shù)組)List數(shù)組的每一個元素中的字符串,為1個驅(qū)動器名,數(shù)組下標(biāo)從0開始。⑶ListCount屬性(正整數(shù))ListCount屬性值表示系統(tǒng)中盤驅(qū)動器的個數(shù)。若系統(tǒng)有驅(qū)動器a:、c:、d:、e:、f:(光驅(qū)),則驅(qū)動器列表框控件drive1的ListCount屬性值為5,執(zhí)行下列語句后在窗體上輸出的結(jié)果為“a:c:d:e:f:”。Fori%=0ToDrive1.ListCount-1PrintDrive1.List(i%);Nexti%=2\*GB1⒉盤驅(qū)動器列表框控件常用事件運行時,當(dāng)單擊驅(qū)動器列表框中某一驅(qū)動器圖標(biāo)時,該驅(qū)動器的名就賦值給控件的Drive屬性,同時引發(fā)Change事件。例7-1在窗體上設(shè)計一個盤驅(qū)動器列表框Drive1、一個標(biāo)簽Label1。當(dāng)程序啟動時,設(shè)置當(dāng)前驅(qū)動器為C盤;選擇盤驅(qū)動器列表框中的盤符,在標(biāo)簽上顯示相應(yīng)的當(dāng)前驅(qū)動器信息。在窗體的Load事件中設(shè)置Drive屬性的初值、編制事件過程Drive1_Change如下:PrivateSubForm_Load()Drive1.Drive="c:"Label1.Caption="當(dāng)前驅(qū)動器為:"+Drive1.DriveEndSubPrivateSubDrive1_Change()Label1.Caption="當(dāng)前驅(qū)動器為:"+Drive1.DriveEndSub界面設(shè)計和程序運行的情況分別如圖7-1a和圖7-1b所示。圖7-1a例7-1之界面設(shè)計圖7-1b例7-1之運行情況7.1.2目錄路徑列表框控件目錄路徑列表框控件在工具箱中的圖標(biāo)為。目錄路徑列表框控件用于顯示當(dāng)前驅(qū)動器中文件夾(目錄)列表。如圖7-2所示。其中,突出顯示的為當(dāng)前目錄。目錄路徑列表框控件缺省的控件名稱為:Dir1、Dir2、……=1\*GB1⒈目錄路徑列表框控件常用屬性⑴Path屬性(字符串類型)Path屬性值為當(dāng)前目錄或所選擇的目錄名。如果選中盤x的根目錄,則Path屬性為"x:\";如果選中盤x的某一個子目錄y(文件夾),則Path屬性為"x:\y"。請注意,Path屬性值的最后一個字符是否為"\",取決于是否選中根目錄。同Drive屬性一樣,Path屬性只能用程序代碼設(shè)置,而不能在設(shè)計時通過屬性窗口設(shè)置。為目錄列表框的Path屬性賦值的語句格式為:<目錄路徑列表框名>.Path[=目錄路徑名]圖7-2文件夾(目錄)列表運行時單擊目錄列表框中某一文件夾(目錄)圖標(biāo)時,該目錄被突出顯示,表示被選中。選中目錄則改變目錄列表框的ListIndex屬性,但是沒有改變其Path屬性,若要改變Path屬性值為所選中的目錄路徑,應(yīng)當(dāng)執(zhí)行語句:<目錄路徑列表框名>.Path=<目錄路徑列表框名>.List(<目錄路徑列表框名>.ListIndex)⑵List屬性(字符串?dāng)?shù)組)List(0)、List(1)、...、List(ListCount-1)中的字符串為目錄路徑列表框中所選目錄下所有的目錄名,該數(shù)組由系統(tǒng)自動生成。⑶ListCount屬性(正整數(shù))ListCount屬性值為List數(shù)組中的元素個數(shù),即所選目錄之下1級目錄的數(shù)量。如在圖7-2中,若VB98目錄下的子目錄已全部顯示,則Dir1.ListCount屬性值為5。若執(zhí)行語句:Fori%=0ToDir1.ListCount-1PrintDir1.List(i%)Nexti%窗體上輸出結(jié)果為:c:\ProgramFile\MicrosoftVisualStudio\VB98\Setupc:\ProgramFile\MicrosoftVisualStudio\VB98\Templatec:\ProgramFile\MicrosoftVisualStudio\VB98\Tsqlc:\ProgramFile\MicrosoftVisualStudio\VB98\Wizardsc:\ProgramFile\MicrosoftVisualStudio\VB98\新文件夾⑷ListIndex屬性(整數(shù))該屬性取值范圍為-n~ListCount-1,當(dāng)前目錄所對應(yīng)的ListIndex屬性值為-1,當(dāng)前目錄的上1級目錄所對應(yīng)的ListIndex屬性值為-2,其中的n反映了當(dāng)前目錄在目錄層次中的深度。Path屬性值也可以通過在事件過程的程序代碼中重新定義Dir控件的ListIndex屬性來選擇設(shè)置:Dir1.ListIndex=2選當(dāng)前目錄下1級目錄中的第3個目錄為當(dāng)前目錄(文件夾)Dir1.ListIndex=0選當(dāng)前目錄下1級目錄中的第1個目錄為當(dāng)前目錄。Dir1.ListIndex=-2選當(dāng)前目錄上1級目錄為當(dāng)前目錄。Dir1.ListIndex=-3選當(dāng)前目錄上2級目錄為當(dāng)前目錄。若要改變的當(dāng)前目錄不存在,則顯示出錯信息。如在圖7-2中,假定當(dāng)前所選文件夾是VB98:執(zhí)行語句“Dir1.ListIndex=2”后文件夾Tsql被突出顯示;執(zhí)行語句“Dir1.ListIndex=0”后文件夾Setup被突出顯示;執(zhí)行語句“Dir1.ListIndex=-3”后文件夾ProgramFiles被突出顯示,等等。=2\*GB1⒉目錄路徑列表框控件常用事件⑴Change事件每次重新設(shè)置或選擇改變目錄路徑列表框的Path屬性時,都將引發(fā)Change事件。運行時雙擊目錄路徑列表框的列表選項,可改變Path屬性值為當(dāng)前目錄名,并執(zhí)行Change事件。⑵Click事件單擊選中目錄路徑列表框控件Dir1的某個目錄名,則選中該目錄,但Dir1.Path屬性沒有改變,可以在事件過程Dir1_Click中寫入語句“Dir1.Path=Dir1.List(Dir1.ListIndex)”,則可以在選擇目錄的同時改變Dir1.Path屬性為所選目錄的路徑。在窗體的Load事件中可以設(shè)置Path屬性的初值。例7-2目錄路徑列表框示例。=1\*GB2⑴界面設(shè)計:在窗體上建立目錄路徑列表框控件Dir1、三個標(biāo)簽控件(Label1、Label2、Label3)以及一個列表框控件List1。程序啟動時,設(shè)置初始當(dāng)前目錄為"C:\WINDOWS";程序運行后,通過鼠標(biāo)雙擊Dir1中的列表選項,改變當(dāng)前目錄,同時在三個標(biāo)簽控件上分別顯示當(dāng)前目錄、當(dāng)前ListIndex和ListCount的值,在List1中顯示當(dāng)前目錄的所有下一級目錄的目錄路徑信息。程序的運行情況如圖7-3所示。圖7-3雙擊“MyDocuments”文件夾后的顯示=2\*GB2⑵過程設(shè)計編寫Form_Load和Dir1_Change事件過程如下:PrivateSubForm_Load()'設(shè)置Dir1控件的初始路徑Dir1.Path="C:\WINDOWS"EndSub'雙擊控件Dir1時執(zhí)行下列事件過程Dir1_ChangePrivateSubDir1_Change()Label1.Caption="當(dāng)前目錄:"+Dir1.PathLabel2.Caption="ListIndex="+Str(Dir1.ListIndex)Label3.Caption="ListCount="+Str(Dir1.ListCount)List1.ClearFori%=0ToDir1.ListCount-1List1.AddItemDir1.List(i%)Nexti%EndSub在雙擊Dir1前,目錄列表框中突出顯示的是C:\WINDOWS目錄;雙擊“MyDocuments”文件夾后,所選目錄和Dir1.Path均改變?yōu)椤癱:\MyDocuments”。將下列Click事件過程與上述過程Dir1_Change相比較,可知要實現(xiàn)同樣的功能,其中的語句“Dir1.Path=Dir1.List(Dir1.ListIndex)”是必不可少的。'單擊控件Dir1時執(zhí)行該事件過程PrivateSubDir1_Click()Dir1.Path=Dir1.List(Dir1.ListIndex)Label1.Caption="當(dāng)前目錄:"+Dir1.PathLabel2.Caption="ListIndex="+Str(Dir1.ListIndex)Label3.Caption="ListCount="+Str(Dir1.ListCount)List1.ClearFori%=0ToDir1.ListCount-1List1.AddItemDir1.List(I%)Nexti%EndSub在實際應(yīng)用中,目錄路徑列表框Dir1與盤驅(qū)動器列表框Drive1有著緊密的關(guān)系。一般情況下,改變盤驅(qū)動器列表框中的驅(qū)動器名后,目錄路徑列表框中的目錄也要隨之改變?yōu)樵擈?qū)動器上的目錄。要實現(xiàn)這樣的同步變化,可以在盤驅(qū)動器列表框的Change事件中設(shè)置如下命令:Dir1.Path=Drive1.Drive將用戶在盤驅(qū)動器列表框中選擇的Drive屬性,改寫目錄列表框中的Path屬性,使目錄列表框中顯示所選驅(qū)動器下的目錄。7.1.3文件列表框控件文件列表框控件用于顯示當(dāng)前目錄中的文件列表,該控件圖標(biāo)為。文件列表框控件缺省的控件名稱為:File1、File2、……=1\*GB1⒈文件列表框控件常用屬性⑴Path屬性(字符串類型)同目錄路徑列表框的Path屬性一樣,用以設(shè)置當(dāng)前文件列表框內(nèi)所顯示文件的存儲路徑。僅在運行時讀寫,不能在屬性窗口中設(shè)置。文件列表框總是顯示Path所指示的文件夾中的文件。若在Form_Load事件中寫入語句“File1.Path="C:\Windows"”,則窗體裝入后File1顯示文件夾C:\Windows中的文件列表。⑵Filename屬性(字符串類型)用以設(shè)置或返回所選文件的文件名,不能在屬性窗口中設(shè)置,運行時若在文件列表框中選擇文件將改寫Filename屬性值。所選文件的全名f$為:IfRight(File1.Path,1)="\"Thenf$=Form1.File1.Path+Form1.File1.FileNameElsef$=Form1.File1.Path+"\"+Form1.File1.FileNameEndIf在第6章中介紹的通用對話框控件也有同名的FileName屬性,請讀者注意兩者的區(qū)別。同樣,在實際應(yīng)用中,文件列表框也要隨著目錄路徑列表框的改變而變化。在程序中創(chuàng)建三個控件Drive1、Dir1、File1,并編制下列事件過程,則程序運行時對這些列表框所作選擇可以起到調(diào)用通用(文件)對話框的作用。PrivateSubDrive1_Change()Dir1.Path=Drive1.DriveEndSubPrivateSubDir1_Change()File1.Path=Dir1.PathEndSub⑶Pattern屬性(字符串類型)用以設(shè)置文件列表框中文件的顯示模式,缺省值為“*.*”。此屬性可以在屬性窗口中設(shè)置,也可以在程序中通過賦值設(shè)置。字符串中為若干個用分號間隔的文件名,在文件名中可以含有通配符。例如:在Form_load事件中寫入語句File1.Pattern="*.exe",使File1列表框中只顯示所有擴展名為EXE的文件;寫入語句File1.Pattern="*.dat;a*.*",使File1列表框中只顯示所有擴展名為DAT以及文件名首字符為a的文件,等等。=2\*GB1⒉文件列表框控件常用事件與盤驅(qū)動器列表框和目錄路徑列表框不同的是:文件列表框能支持PathChange和PatternChange事件,但不能響應(yīng)Change事件。=1\*GB2⑴PathChange事件當(dāng)改變了文件列表框的文件顯示路徑時,引發(fā)PathChange事件。=2\*GB2⑵PatternChange事件當(dāng)改變了文件列表框的文件顯示模式,即Pattern屬性值的改變將引發(fā)PatternChange事件。例7-3在窗體上建立一個盤驅(qū)動器列表框Drive1、目錄路徑列表框Dir1、文件列表框File1、影像框Image1,運行時選擇File1中所列的圖片文件,則相應(yīng)圖片顯示在影像框Image1中。=1\*GB2⑴界面設(shè)計,如圖7-4所示。圖7-4例7-3之界面設(shè)計=2\*GB2⑵過程設(shè)計PrivateSubForm_Load()Drive1.Drive="c:\"'設(shè)置Drive1的初始盤符File1.Pattern="*.bmp;*.pif"'設(shè)置File1的文件顯示模式EndSubPrivateSubDrive1_Change()Dir1.Path=Drive1.Drive'使Dir1與Drive1同步改變EndSubPrivateSubDir1_Change()File1.Path=Dir1.Path'File1與Dir1同步改變EndSubPrivateSubFile1_Click()'單擊文件列表選項,加載圖片IfRight(File1.Path,1)="\"Thenf$=Form1.File1.Path+Form1.File1.FileNameElsef$=Form1.File1.Path+"\"+Form1.File1.FileNameEndIfImage1.Picture=LoadPicture(f$)EndSub程序運行的情況如圖7-5所示。圖7-5例7-3之運行情況7.2與文件操作有關(guān)的語句7.2.1直接調(diào)用外部可執(zhí)行文件的Shell方法調(diào)用Shell函數(shù)可以執(zhí)行外部的可執(zhí)行文件,其擴展名如.exe、.com、.bat或.pif,缺省擴展名為.exe。不能執(zhí)行操作系統(tǒng)的內(nèi)部命令及所有非執(zhí)行文件(如文檔),否則將顯示出錯信息。調(diào)用shell函數(shù)的格式:CallShell(<Filename>[,Windows_style])或<變量名>=Shell(Filename,Windows_style)其中:Filename為字符串,是所調(diào)用可執(zhí)行文件的全名。Windows_style參數(shù)用于規(guī)定當(dāng)前窗口與被調(diào)用文件窗口的不同狀態(tài)。其值為0、1、2、3、4、6的表達式。函數(shù)返回值在Windows9x中無意義,但必須書寫,因此格式中的“變量名”是無用但又是必須的。例7-4將例7-3工程生成為exe文件,保存在D:盤根目錄下,并取名為Tupian,則可用以下方式調(diào)用該工程。PrivateSubCommand1_Click()x=Shell("d:\tupian.exe",0)EndSub例7-5在窗體上添加通用對話框控件Commondialog1、單擊命令按鈕Command1,打開文件對話框選擇擴展名為EXE的文件執(zhí)行。=1\*GB2⑴界面設(shè)計,如圖7-6a所示:圖7-6a例7-5之界面設(shè)計圖7-6b例7-5之運行情況=2\*GB2⑵過程設(shè)計PrivateSubCommand1_Click()CommonDialog1.Action=1x=Shell(CommonDialog1.Filename,0)EndSub若運行時在文件對話框中選擇windows中“計算器”文件“calc.exe”,則該程序被調(diào)用,如圖7-6b所示,關(guān)閉計算器窗口后,控制返回到VB應(yīng)用程序界面。7.2.2目錄和文件操作語句=1\*GB1⒈改變當(dāng)前盤格式:ChDrive<盤符>其中:<盤符>為字符串,即驅(qū)動器名。例7-6確認calc.exe的準(zhǔn)確位置如“c:\windows\calc.exe”(可以通過運行“開始”菜單的“查找”選項確認),下列過程打開該文件。PrivateSubCommand1_Click()ChDrive"c:"'改變c:盤為當(dāng)前盤y=Shell("\windows\calc.exe",0)'省略盤符,指當(dāng)前盤EndSub=2\*GB1⒉創(chuàng)建文件夾格式:MKDir<文件夾名>例7-7(先建立1個目錄路徑列表框以便觀察)執(zhí)行下列事件過程。PrivateSubcommand1_click()MKdir"c:\aaa"'建立文件夾c:\aaaMkDir"c:\aaa\bbb"'建立文件夾c:\aaa\bbbEndSub如果要創(chuàng)建的文件夾已經(jīng)存在、或所指出的路徑是錯誤的,則執(zhí)行該過程將產(chǎn)生錯誤信息。如上面的兩條命令如交換次序,則出現(xiàn)錯誤,因為在建立文件夾bbb時,所指出的路徑c:\aaa還不存在。=3\*GB1⒊刪除文件夾格式:RMDir<文件夾名>例7-8(在運行例7-7程序的基礎(chǔ)上)執(zhí)行下列事件過程。PrivateSubCommand1_Click()RMdir"c:\aaa\bbb"'刪除文件夾c:\aaa\bbbRMDir"c:\aaa"'刪除文件夾c:\aaa,如果與上1句交換位置將出錯。EndSub如果要刪除的文件夾不存在,或是該文件夾下面還有文件、文件夾存在,則該語句將產(chǎn)生錯誤信息。=4\*GB1⒋改變當(dāng)前目錄格式:CHDir<PATH>例如,執(zhí)行語句“CHdir"c:\vb6"”,即把c:\vb6設(shè)置為當(dāng)前目錄。如果要改變的目錄不存在,則該語句將產(chǎn)生錯誤信息。此外,還有返回當(dāng)前目錄的CurDir函數(shù),其格式為:CurDir[(盤符)]例如:ChDrive"d:"'改變d:盤為當(dāng)前盤。ChDir"\hts"'改變默認盤的當(dāng)前目錄為d:\hts”。PrintCurDir'函數(shù)CurDir返回值為字符串"d:\hts"。=5\*GB1⒌復(fù)制文件格式:FileCopy<源文件名>,<目標(biāo)文件名>例如,執(zhí)行語句“FileCopy"d:\hts\vb_4.doc","a:\vb4.doc"”,可將d:\hts中的文件vb_4.doc復(fù)制到a:盤,并取名為vb4.doc。⑴文件名中,缺省盤符指當(dāng)前盤;缺省路徑指當(dāng)前目錄。⑵文件名中,不可以缺省文件主名、不可使用通配符。=6\*GB1⒍刪除文件格式:Kill<文件名>例如,執(zhí)行語句“Kill"d:\hts\vb_4.doc"”則刪除d:\hts中文件名為vb_4.doc的文件。⑴文件名中,缺省盤符指當(dāng)前盤;缺省路徑指當(dāng)前目錄。⑵文件名中可使用通配符,以刪除一批文件。如執(zhí)行語句“Kill"d:\hts\*.doc"”,則刪除d:\hts中所有的擴展名為doc的文件。⑶如果需要刪除的文件未找到,系統(tǒng)顯示出錯信息。=7\*GB1⒎文件改名、移動格式:Name<old_name>as<new_name>例如,執(zhí)行語句“Name"d:\hts\aaa.txt"as"d:\bbb.dat"”后,文件d:\hts\aaa.txt被改名(在此亦即移動)為d:\bbb.dat。缺省盤符為當(dāng)前盤、缺省路徑為當(dāng)前目錄。如果指定的目錄、文件不存在,則該語句將產(chǎn)生錯誤信息。如果新文件名與原文件的路徑和文件名都不同,則做移動且改名操作。=8\*GB1⒏獲取文件屬性的函數(shù)格式:GetAttr(<Filename>)函數(shù)的返回值是一個整數(shù)例如:x=GetAttr("d:\bbb.dat")函數(shù)的返回值與對應(yīng)文件屬性值分別如下:⑴常規(guī)屬性:0⑵只讀屬性:1⑶隱藏屬性:2⑷系統(tǒng)屬性:4⑸文件夾:16⑹上次備份后已改變:32=9\*GB1⒐設(shè)置文件屬性格式:SetAttr<Filename>,Attributes例如:SetAttr"d:\bbb.dat",1'設(shè)置文件d:\bbb.dat為只讀文件SetAttr"aaa.txt",2'設(shè)置缺省目錄下的文件aaa.txt為隱藏文件=10\*GB1⒑返回文件最后1次修改的日期和時間的函數(shù)格式:FileDateTime(<Filename>)返回值為字符串例如,執(zhí)行語句“dt$=FileDateTime("d:\bbb.dat")”后,如dt$中的字符串為“00-5-23PM4:18:26”,表明該文件最后1次修改的日期和時間是2000年5月23日下午4點18分26秒。=11\*GB1⒒檢測文件長度的函數(shù)格式:FileLen(<Filename>)返回數(shù)值表示文件的字節(jié)數(shù)例如,執(zhí)行語句“PrintFilelen("d:\bb.dat")”的輸出結(jié)果為文件bb.dat的字節(jié)數(shù)。7.3數(shù)據(jù)文件的操作7.3.1文件的基本概念=1\*GB1⒈文件、文件標(biāo)識符文件是數(shù)據(jù)信息在磁盤上的1種存儲結(jié)構(gòu)。計算機系統(tǒng)中的不同文件以不同的文件標(biāo)識符區(qū)分,文件標(biāo)識符即文件全名,包括存儲路徑、主名、擴展名3部分組成。在使用順序文件時應(yīng)注意以下幾點:?順序文件在打開時必須指定對文件的操作方式(Input、Output、Append),打開后只能對文件按指定的方式進行操作。每打開一次文件,只能進行單一的一種操作。?順序文件以O(shè)utput方式打開后,總是從文件的開頭寫,使用這種方式打開一個已經(jīng)存在的文件,磁盤上的原有同名文件將被覆蓋、其中的數(shù)據(jù)將會丟失;?順序文件以Append方式打開后,總是從文件的末尾寫,磁盤上的原有同名文件中的數(shù)據(jù)仍然存在;?順序文件以Input方式打開后,總是從文件的開頭讀文件,即使需要的是最后一行內(nèi)容也必須如此。=2\*GB1⒉文件的存儲格式按文件的存儲格式,可以把文件分為以下幾種。⑴ASCII(字符、正文)文件:按字符的ASCII碼存儲,每個字符占1個字節(jié)。⑵二進制文件,按數(shù)據(jù)的機內(nèi)碼存儲,每個數(shù)據(jù)所占存儲空間為該類型數(shù)據(jù)的字節(jié)數(shù)。3.文件的存取方式按文件的存取方式,可以把文件分為以下幾種。⑴順序文件:必須在順序訪問文件中某個數(shù)據(jù)前(物理位置)的所有數(shù)據(jù)后,才可以訪問該數(shù)據(jù)。⑵隨機文件:可以直接訪問文件中的任何1個數(shù)據(jù)。ASCII文件中的數(shù)據(jù)進入內(nèi)存要轉(zhuǎn)換為二進制形式,計算機處理的效率不如二進制文件。由于用戶可以直接識別、并可以用編輯器編輯ASCII文件中的數(shù)據(jù),使用較為普遍;而順序文件的操作相對隨機文件較為方便,以下介紹ASCII文件的順序操作。7.3.2順序文件操作=1\*GB1⒈打開、關(guān)閉文件文件必須先打開,才可以對其進行訪問。結(jié)束訪問后應(yīng)當(dāng)關(guān)閉文件,應(yīng)用程序終止運行時也會自動關(guān)閉文件。⑴打開文件格式:Open<Filename>ForMode[LockLock_level]As[#]File_numb其中:①必選項Filename為字符串,為所打開文件的文件標(biāo)識符。②Mode選項只能取下列關(guān)鍵字之一:Input:打開文件、只讀,文件不存在則顯示出錯信息。Output:打開文件、只寫,文件不存在則新建文件、否則刷新文件。Append:打開文件、在文件末尾追加數(shù)據(jù),文件不存在則新建文件。③Lock_level選項只能取下列關(guān)鍵字之一:Read:別的任務(wù)或進程不可讀該文件。Write:別的任務(wù)或進程不可寫該文件。ReadWrite:別的任務(wù)或進程不可讀、寫該文件。若缺省該選項,用Input打開的文件默認該項為Write、用Output、Append打開的文件默認該項為ReadWrite。④File_numb為打開文件后使用的通道號,為正整數(shù)值,一般應(yīng)從小到大使用。函數(shù)Freefile返回值為系統(tǒng)中當(dāng)前最小、沒有為其他文件所用的通道號,常常與Open語句一起使用:n%=Freefile:Open"d:\user\a.txt"ForOutputAsn%⑵關(guān)閉文件結(jié)束訪問文件后,應(yīng)關(guān)閉該文件以保證其正確和完整,關(guān)閉文件使用Close語句。格式:Close[[#]File_numb]該語句關(guān)閉由通道號File_numb所指定的文件,若缺省[#]File_numb,則關(guān)閉所有用Open語句打開的文件。=2\*GB1⒉寫順序文件可以用Print#語句或Write#語句將數(shù)據(jù)寫入到順序文件。=1\*GB2⑴Write#語句格式:Write#File_numb,[表達式列表]其中:①表達式列表用逗號或分號間隔效果一樣,都是在寫入的數(shù)據(jù)間加入逗號作分隔符。②表達式列表末尾無分隔符,則輸出回車、換行符到文件。③字符串表達式寫入文件時字符串兩端自動加雙引號,其他非數(shù)值類型數(shù)據(jù)寫入文件時兩端加“#”號。例7-9用Write#語句寫文件。PrivateSubForm_Click()Open"d:\aaa\a.dat"ForOutputAs#1'打開文件,做好寫準(zhǔn)備Write#1,1,2,3;4;5'寫文件Write#1,5;6;7;8;9Write#1,'在文件中寫入一空行Write#1,"abc","def";True,'不換行Write#1,FalseClose#1'關(guān)閉文件EndSub讀者可以利用Windows附件中的寫字板程序打開文件d:\aaa\a.dat,觀察文件的實際內(nèi)容,如圖7-7所示。圖7-7用寫字板程序打開文件d:\aaa\a.dat⑵Print#語句格式:Print#File_numb,[表達式列表]用Print#語句寫到文件的內(nèi)容、格式,與Print語句輸出到窗體上的內(nèi)容與格式相類似。例7-10用Print#語句寫文件。PrivateSubForm_Click()Open"d:\aaa\b.dat"ForOutputAs#1Print#1,1,2,3;4;5Print#1,5;6;7;8;9Print#1,Print#1,"abc","def";True,Print#1,FalseClose#1EndSub同樣,利用寫字板程序打開d:\aaa\b.dat,觀察文件的實際內(nèi)容,如圖7-8所示。圖7-8用寫字板程序打開文件d:\aaa\b.dat=3\*GB1⒊讀順序文件可以用Input#語句或LineInput#語句從順序文件讀數(shù)據(jù)。⑴Input#語句格式:Input#File_numb,<變量名列表>讀順序文件時,由數(shù)據(jù)間的分隔符區(qū)分哪段字符與哪個變量對應(yīng),具體規(guī)則如下:①非數(shù)字、小數(shù)點、正負號、E字符作為數(shù)值數(shù)據(jù)之間的分隔符;②日期、邏輯類型數(shù)據(jù)的兩端以“#”號作為分隔符,與其他類型數(shù)據(jù)之間應(yīng)有非空字符間隔。③逗號、換行符可以作為字符數(shù)據(jù)的分隔符,雙引號作為字符數(shù)據(jù)分隔符必須成對出現(xiàn)。⑵LineInput#語句格式:LineInput#file_numb,<字符串變量名>將文件的當(dāng)前讀寫位置起至換行符前的所有字符讀入到字符串變量。例如:用Input方式打開例7-9所建立的文件d:\aaa\a.dat,執(zhí)行以下命令:Open"d:\aaa\a.dat"ForInputAs#1LineInput#1,s$Prints$窗體上的輸出結(jié)果如下:12345下面,討論外部文件的數(shù)據(jù)格式與輸入語句如何匹配的問題:·如果文件中的數(shù)據(jù)是在某種編輯器中直接輸入的,則數(shù)據(jù)間必須有適當(dāng)?shù)姆指舴?,否則程序?qū)㈦y以處理!例如下列形式的數(shù)據(jù)很難讀到相應(yīng)的變量中去。張三03/12/678976李四05/11/695769…………如果改成如下形式,則可以設(shè)計輸入語句“Input#1,a$,d,i%,j%”讀取。其中,與變量a$對應(yīng)的字符串,可以加引號或以逗號作為間隔符。"張三"#03/12/67#,89,76李四,#05/11/69#,5769"王五",#03/12/67#,89,76…………建議:·如果文件中的數(shù)據(jù)是直接在編輯器中輸入的,需要為字符串加引號,日期、邏輯類型數(shù)據(jù)加“#”號,所有不同數(shù)據(jù)之間加逗號?!と绻募械臄?shù)據(jù)是VB應(yīng)用程序的輸出結(jié)果,以采用WRITE#語句輸出而以Input#語句輸入為宜。4.與文件讀寫有關(guān)的函數(shù)⑴測試文件的當(dāng)前讀寫位置是否到達文件末尾的函數(shù):EOF(#File_numb)函數(shù)返回邏輯值TRUE表示已到達文件末尾。文件剛打開時,讀寫位置位于文件開始處。在程序中,利用Input#或LineInput#語句讀取數(shù)據(jù)時,常用EOF函數(shù)來測試是否到了文件尾。⑵測試已打開文件的字節(jié)總數(shù):LOF(#File_numb)函數(shù)返回長整數(shù)表示該文件的所占存儲單元的字節(jié)總數(shù)。例7-11找出1000之內(nèi)的素數(shù)寫入文件d:\aaa\su.dat。然后輸入若干個數(shù),通過在該文件中查找這些數(shù)是否存在的方法,判斷它們是否為素數(shù)。=1\*GB2⑴界面設(shè)計在窗體上設(shè)計兩個命令按鈕Command1、Command2,和一個文本框Text1。=2\*GB2⑵過程設(shè)計,開始時使Command1有效而Command2不能響應(yīng)。單擊Command1后創(chuàng)建存放素數(shù)的數(shù)據(jù)文件d:\aaa\su.dat,然后使Command2有效而Command1不能響應(yīng);單擊Command2,用輸入對話框輸入1個小于1000的正整數(shù),判斷是否素數(shù),并在文本框中輸出有關(guān)的信息。編寫Command1、Command2的Click事件過程代碼如下:PrivateSubCommand1_Click()'該事件過程在文件d:\aaa\su.dat中1行寫入5個素數(shù)。Open"d:\aaa\su.dat"ForOutputAs#1k%=2Write#1,2,3,'寫入2個素數(shù)2和3之間自動加逗號間隔。Fori%=5To997Step2Forj%=3ToSqr(i%)Step2Ifi%Modj%=0ThenExitForNextj%Ifj%>Sqr(i%)Thenk%=k%+1Ifk%=5Thenk%=0Write#1,i%'1行寫入5個素數(shù)后換行ElseWrite#1,i%,EndIfEndIfNexti%Close#1Command1.Enabled=FalseCommand2.Enabled=TrueEndSubPrivateSubCommand2_Click()Text1.Text=""k%=InputBox("請輸入1個小于1000的正整數(shù)","判斷是否素數(shù)")Open"d:\aaa\su.dat"ForInputAs#1DoWhileNotEOF(1)Input#1,n%Ifn%=k%ThenText1.Text=Str(k%)+"是素數(shù)!"Ifn%>=k%ThenExitDoLoopIfEOF(1)Orn%>k%ThenText1.Text=Str(k%)+"不是素數(shù)!"Close#1EndSubPrivateSubCommand3_Click()EndEndSubPrivateSubForm_Load()Command2.Enabled=FalseEndSub7.4實例例7-12選擇一個文件,分別統(tǒng)計文件中數(shù)字字符、英文字符以及其他字符的個數(shù),然后輸出統(tǒng)計結(jié)果。=1\*GB2⑴界面設(shè)計,如圖7-9a所示。在窗體上添加4個標(biāo)簽控件:Label1、Label2、Label3分別顯示提示信息“數(shù)字字符數(shù)”、“字母字符數(shù)”、“其他字符數(shù)”,Label4用于在程序啟動時提示用戶單擊窗體選擇文件;添加3個文本框控件Text1、Text2、Text3用來輸出統(tǒng)計結(jié)果;添加通用對話框控件CommonDialog1,設(shè)置為“打開文件”對話框,用于選擇文件。圖7-9a例7-12之界面設(shè)計=2\*GB2⑵過程設(shè)計。程序啟動后,先隱藏Label1、Label2、Label3和Text1、Text2、Text3;單擊窗體打開“打開文件”對話框,選擇文件(如d:\abc.txt),在程序中用Input方式打開在“打開文件”對話框中所選擇的文件,利用LineInput語句將文件中的信息整行整行地讀到變量中,然后統(tǒng)計各類字符的數(shù)量,并將統(tǒng)計結(jié)果輸出。編寫Form_Load()、Form_Click()事件過程如下:PrivateSubForm_Click()DimSAsString,LengthAsIntegerDimn1AsInteger,n2AsInteger,n3AsIntegerCommonDialog1.Action=1Form1.Caption="文件"&CommonDialog1.FileName&"字數(shù)統(tǒng)計"'用Input方式打開在“打開文件”對話框中所選擇的文件OpenCommonDialog1.FileNameForInputAs#1n1=0:n2=0:n3=0DoWhileNotEOF(1)LineInput#1,SLength=Len(S)Fori%=1ToLengthIfMid(S,i%,1)<="9"AndMid(S,i%,1)>="0"Thenn1=n1+1'統(tǒng)計數(shù)字字符的個數(shù)'函數(shù)UCase返回其字符串參數(shù)轉(zhuǎn)換后的字符串,轉(zhuǎn)換的規(guī)則是,小寫字母全部'轉(zhuǎn)換為對應(yīng)的大寫字母。ElseIfUCase(Mid(S,i%,1))<="Z"And_UCase(Mid(S,i%,1))>="A"Thenn2=n2+1'統(tǒng)計英文字母的個數(shù)Elsen3=n3+1'統(tǒng)計其他字符的個數(shù)EndIfNexti%LoopClose#1Text1.Text=n1:Text2.Text=n2:Text3.Text=n3Label4.Visible=FalseLabel1.Visible=TrueLabel2.Visible=TrueLabel3.Visible=TrueText1.Visible=TrueText2.Visible=TrueText3.Visible=TrueEndSubPrivateSubForm_Load()Label1.Visible=False:Label2.Visible=FalseLabel3.Visible=False:Text1.Visible=FalseText2.Visible=False:Text3.Visible=FalseEndSub程序運行的情況如圖7-9b所示。圖7-9b例7-12之程序運行例7-13順序文件中存放了若干個數(shù),讀入后按值由小到大排列,再重新寫入文件??紤]到如果事先沒有這樣的文件存在,程序中設(shè)計了自動“生成數(shù)據(jù)文件”、“選擇數(shù)據(jù)文件”這樣兩個選項。無論是選擇數(shù)據(jù)文件,還是自動生成數(shù)據(jù)文件,此后進入窗體二,讀入數(shù)據(jù)文件、排序后再重新寫入該數(shù)據(jù)文件。=1\*GB1⒈窗體一(確定數(shù)據(jù)文件)=1\*GB2⑴界面設(shè)計,如圖7-10a所示。請讀者注意本例中驅(qū)動器列表框、目錄列表框、文件列表框的用法,以及相關(guān)事件過程代碼。他們之間實現(xiàn)了一定的關(guān)聯(lián):目錄列表框顯示所選驅(qū)動器的目錄,文件列表框顯示所選目錄下的文件。圖7-10a例7-13窗體一之界面設(shè)計=2\*GB2⑵過程設(shè)計:PublicflagAsBoolean'flag為True表示選擇數(shù)據(jù)文件、否則表示自動生成數(shù)據(jù)文件,'為使在窗體二中能夠訪問該變量,因此要聲明為全局變量。PrivateSubForm_Load()Drive1.Drive="d:\"Dir1.Path=Drive1.DriveFile1.Path=Dir1.Path'先鎖定三個控件,因為要首先選擇“選擇數(shù)據(jù)文件”或“生成數(shù)據(jù)文件”。Drive1.Enabled=FalseDir1.Enabled=FalseFile1.Enabled=FalseEndSub在其他三個控件的Enable屬性全為False時,窗體一中只有兩個單選按鈕,運行時必有一個自動獲得焦點。在第四章,已介紹了單選按鈕,該控件的一個特性是:獲得焦點時,執(zhí)行該單選按鈕的SetFocus事件、Click事件。如果為兩個單選按鈕編制了各自的Click事件,由于其中一個自動獲得焦點、執(zhí)行Click事件過程,那么這種選擇就沒有意義了。由于以上原因,在此,我們只為單選按鈕的鼠標(biāo)雙擊事件編制事件過程。PrivateSubOption1_dblClick()IfOption1.Value=TrueThenDrive1.Enabled=TrueDir1.Enabled=TrueFile1.Enabled=Trueflag=True'作選擇數(shù)據(jù)文件標(biāo)記EndIfEndSubPrivateSubOption2_DblClick()flag=False'作自動生成數(shù)據(jù)文件標(biāo)記Form2.ShowEndSubPrivateSubDrive1_Change()OnErrorGoToL1'以下若出現(xiàn)運行錯誤,則轉(zhuǎn)去執(zhí)行標(biāo)號為L1的語句。Dir1.Path=Drive1.DriveExitSubL1:MsgBox"訪問驅(qū)動器錯誤"EndSubPrivateSubDir1_Change()'雙擊目錄列表框才能改變Dir1的Path屬性File1.Path=Dir1.PathEndSubPrivateSubFile1_Click()Form2.ShowEndSub單擊目錄列表框不能改變其Path屬性,在本例中,需要雙擊目錄列表框,該控件的Chang事件才會發(fā)生。可以在事件過程Dir1_Click中寫入語句“Dir1.Path=Dir1.List(Dir1.ListIndex)”,則可以在選擇目錄的同時改變Dir1.Path屬性為所選目錄的路徑。=2\*GB1⒉窗體二(排序)=1\*GB2⑴界面設(shè)計,可參見圖7-10b。其中:列表框控件List1顯示從文件中依次讀入的各個數(shù)據(jù);設(shè)置列表框控件List2的Sorted屬性為True、則添加到List2中的表項按字典序從小到大排放(如圖7-10b),而不是按數(shù)值從小到大排放。因此,界面上還設(shè)計有“排序”命令按鈕,單擊該按鈕則采用第2章中所介紹的選擇算法、將數(shù)組List2.List中的各元素按值從小到大重新排序。圖7-10b例7-13窗體二之運行=2\*GB2⑵過程設(shè)計:Dimf$AsString'模塊級字符串變量f$,存放要重新排序的數(shù)據(jù)文件名。PrivateSubForm_Load()DimaAsSingleList1.ClearIfForm1.flag=FalseThen'如果窗體1中選擇了自動生成數(shù)據(jù)文件f$="e:\temp.dat"Open"e:\temp.dat"ForOutputAs#1'在e:\新建文件temp.datFori%=1To20'生成20個隨機數(shù),寫入文件并在List1中顯示。a=Rnd*100Print#1,aList1.AddItemStr(a)Nexti%Close#1Else'如果窗體1中選擇了某個數(shù)據(jù)文件,則生成該文件全名f$。IfRight(Form1.File1.Path,1)="\"Thenf$=Form1.File1.Path+Form1.File1.FileNameElsef$=Form1.File1.Path+"\"+Form1.File1.FileNameEndIfOpenf$ForInputAs#1'打開該文件,讀數(shù)據(jù)并在List1顯示。DoWhileNotEOF(1)Input#1,aList1.AddItemStr(a)LoopClose#1EndIfEndSub'將列表框控件List1中的各表項復(fù)制到列表框控件List2PrivateSubCommand1_Click()Fori%=0ToList1.ListCount-1List2.AddItem(List1.List(i%))Nexti%EndSub'用選擇排序法對List2.List數(shù)組排序PrivateSubCommand2_Click()Fori%=0ToList2.ListCount-2k%=i%Forj%=i%+1ToList2.ListCount-1IfVal(List2.List(j%))<Val(List2.List(k%))Thenk%=j%Nextj%t$=List2.List(k%)List2.List(k%)=List2.List(i%)List2.List(i%)=t$Nexti%EndSubPrivateSubCommand3_Click()'將List2中各表項寫入文件Openf$ForOutputAs#1Fori%=0ToList2.ListCount-1Print#1,List2.List(i%)Nexti%Close#1EndSub例7-14每個班的學(xué)生基本信息分別存放在各順序文件中,設(shè)計1個學(xué)生基本信息管理系統(tǒng),該系統(tǒng)具備修改、刪除、追加等基本的編輯功能。=1\*GB2⑴界面設(shè)計,如圖7-11所示。圖7-11例7-14之界面設(shè)計=2\*GB2⑵過程設(shè)計DimFilenameAsString'模塊級,存放所選擇的文件名。PrivateSubForm_Load()'設(shè)置List1的各列表項,在選擇班級之前鎖定前面4個命令按鈕以及編輯(文本)框。List1.List(0)="藝術(shù)設(shè)計991"List1.List(1)="藝術(shù)設(shè)計992"List1.List(2)="藝術(shù)設(shè)計993"List1.List(3)="藝術(shù)設(shè)計994"Command1.Enabled=FalseCommand2.Enabled=FalseCommand3.Enabled=FalseCommand4.Enabled=FalseText1.Enabled=FalseEndSubPrivateSubList1_Click()'單擊List1選擇班級ChDrive"d:"ChDir"\aaa"'設(shè)置當(dāng)前目錄、當(dāng)前目錄應(yīng)存在List2.Clear'清除List2所顯示的列表項Filename="99"+Chr(Asc("0")+List1.ListIndex+1)+".txt"'構(gòu)造文件名,991.txt、992.txt、993.txt、994.txt必須在當(dāng)前目錄下存在。OpenFilenameForInputAs#1'打開順序文件用于輸入數(shù)據(jù)WhileNotEOF(1)'逐行讀文件中的數(shù)據(jù),直至讀到文件末尾。'從文件中讀入以回車結(jié)束的1串字符,送入字符串變量st$。LineInput#1,st$List2.AddItemst$'將字符串顯示在List2中WendClose#1Command2.Enabled=True'此后可以追加數(shù)據(jù)。List1.Enabled=False'此后列表框1不可再選。EndSub'從列表框2選擇字符串寫入Text1.Text編輯修改,修改后可以作為追加或刪除的數(shù)據(jù)PrivateSubList2_Click()Text1.Enabled=TrueText1.Text=List2.List(List2.ListIndex)Command1.Enabled=TrueCommand2.Enabled=FalseCommand4.Enabled=TrueEndSub'修改確認,用Text1.Text置換List2中對應(yīng)項PrivateSubCommand1_Click()List2.List(List2.ListIndex)=Text1.TextText1.Text=""Command1.Enabled=FalseCommand3.Enabled=FalseCommand4.Enabled=FalseEndSubPrivateSubCommand2_Click()'追加,使Text1獲得輸入焦點Text1.Enabled=True:Text1.SetFocusCommand3.Enabled=True'激活“追加確認”按紐。EndSubPrivateSubCommand3_Click()'追加確認List2.List(List2.ListCount)=Text1.Text'將文本框中文本追加到List2Text1.Text=""Command1.Enabled=False'追加后文本框置空并鎖定相應(yīng)按紐Command3.Enabled=FalseCommand4.Enabled=FalseText1.Enabled=FalseEndSubPrivateSubCommand4_Click()'刪除確認,移去List2中所選中的列表項List2.RemoveItem(List2.ListIndex)Command1.Enabled=FalseCommand3.Enabled=FalseCommand4.Enabled=FalseText1.Text=""EndSubPrivateSubCommand5_Click()'選擇班級,激活List1并鎖定相應(yīng)命令按鈕。List1.Enabled=FalseCommand1.Enabled=FalseCommand2.Enabled=FalseCommand3.Enabled=FalseCommand4.Enabled=FalseText1.Enabled=FalseList2.Clear'清空List2List1.Enabled=True'激活List1EndSubPrivateSubCommand6_Click()'存盤OpenfilenameForOutputAs#1'打開文件用于輸入Fori%=0ToList2.ListCount-1'將列表框2中各列表項逐行寫入文件Print#1,List2.List(i%)'此處說明請見程序后的注解Nexti%Close#1List1.Enabled=TrueList2.ClearEndSubPrivateSubCommand7_Click()EndEndSub若將Command6中的語句:Print#1,List2.List(i%)寫作:Write#1,List2.List(i%)則列表框2中數(shù)據(jù)每向文件輸出1次,字符串兩端就自動加1重雙引號。因此,程序中采用Print語句向文件輸出字符串,而不是采用Write語句。文件的輸入、輸出語句,一般應(yīng)經(jīng)測試無誤后再使用。例7-15設(shè)計一個文本編輯器,使其具有建立、編輯、保存文件內(nèi)容的功能。=1\*GB2⑴界面設(shè)計=1\*GB3①在窗體上添加通用對話框控件CommonDialog1、文本框控件Text1,設(shè)置對象屬性如下:Form1.Caption="文本編輯器"設(shè)置窗體標(biāo)題Text1.Multiline=True設(shè)置文本框具有多行功能Text1.ScrollBars=2設(shè)置文本框具有垂直滾動條=2\*GB3②打開菜單編輯器,設(shè)置菜單項,如表7-1所示。表7-1菜單項設(shè)置菜單標(biāo)題(Caption)名稱(Name)索引(Index)說明文件(&F)Files主菜單項1...新建(&N)File0子菜單項11...打開(&O)File1子菜單項12...保存(&S)File2子菜單項13...另存為(&A)File3子菜單項14...退出(&X)File4子菜單項15編輯(&E)Edits主菜單項2...剪切Edit0子菜單項21...復(fù)制Edit1子菜單項22...粘貼Edit2子菜單項23=3\*GB3③建立圖片框控件Picture1,設(shè)置Picture1.Align=1。=4\*GB3④在Picture1上畫出名稱為Command1的6個命令按鈕所組成的控件數(shù)組。將每個數(shù)組元素的Caption屬性都設(shè)置為空串;將每個數(shù)組元素的Style屬性都設(shè)置為1,即設(shè)置為圖形按鈕;設(shè)置各個數(shù)組元素的Picture屬性:分別加載new.bmp、open.bmp、save.bmp、cut.bmp、copy.bmp、paste.bmp等圖片文件(讀者可以在Windows中查找這些文件,確定它們的路徑)。界面設(shè)計如圖7-12所示。圖7-12例7-15之界面設(shè)計=2\*GB2⑵過程設(shè)計PrivateSubForm_Load()Text1.Left=Form1.ScaleLeft'設(shè)置文本框的位置、大小Text1.Width=Form1.ScaleWidthText1.Top=Picture1.Top+Picture1.HeightText1.Height=Form1.ScaleHeight-Text1.TopText1.Text=""Edit(0).Enabled=False'初始時使菜單和工具欄中的剪切、復(fù)制不能響應(yīng)Command1(3).Enabled=FalseEdit(1).Enabled=FalseCommand1(4).Enabled=FalseEndSubPrivateSubText1_MouseUp(ButtonAsInteger,ShiftAsInteger,_XAsSingle,YAsSingle)'編寫Text1_MouseUp事件,在文本框中釋放鼠標(biāo)鍵時產(chǎn)生該事件。IfText1.SelLength=0ThenEdit(0).Enabled=FalseCommand1(3).Enabled=FalseEdit(1).Enabled=FalseCommand1(4).Enabled=FalseElse'當(dāng)文本框中選擇了文本后,使菜單和工具欄中的剪切、復(fù)制有效。Edit(0).Enabled=True:Command1(3).Enabled=TrueEdit(1).Enabled=True:Command1(4).Enabled=TrueEndIfEndSubPrivateSubFile_Click(IndexAsInteger)'編寫文件菜單的單擊事件過程n%=IndexSelectCasen%Case0'新建文件Text1.Text=""Form1.Caption="未命名"Case1'打開文件CommonDialog1.ShowOpen'打開通用對話框,選擇文件fname=CommonDialog1.FileNameIffname<>""ThenText1.Text=""OpenfnameForInputAs#1'將選定文件中的內(nèi)容逐行添加到文本框DoUntilEOF(1)LineInput#1,nextlineText1.Text=Text1.Text+nextline+Chr(13)+Chr(10)LoopClose#1EndIfForm1.Caption=fnameCase2'保存文件IfForm1.Caption="未命名"OrForm1.Caption="文本編輯器"Then'若文件未保存過,則打開通用對話框設(shè)置路徑和文件名、保存;否則直接保存。CommonDialog1.ShowSavefname=CommonDialog1.FileNameElsefname=Form1.CaptionEndIfIffname<>""ThenOpenfnameForOutputAs#1Print#1,Text1.Text:Close#1EndIfCase3'文件另存為CommonDialog1.ShowSavefname=CommonDialog1.FileNameIffname<>""ThenOpenfnameForOutputAs#1Print#1,Text1.TextClose#1EndIfCase4'退出,程序結(jié)束EndEndSelectEndSubPrivateSubEdit_Click(IndexAsInteger)'編寫編輯菜單的單擊事件過程n%=IndexSelectCasen%Case0'剪切將選中的文本內(nèi)容送到剪貼板Clipboard.SetTextText1.SelTextText1.SelText=""'刪除文本框中選中的文本內(nèi)容Case1'復(fù)制Clipboard.SetTextText1.SelTextCase2'粘貼Text1.SelText=Clipboard.GetText()EndSelectEndSubPrivateSubCommand1_Click(IndexAsInteger)'編寫工具欄按鈕的Click事件過程n%=IndexSelectCasen%Case0'新建File_Click(0)Case1'打開File_Click(1)Case2'保存File_Click(2)Case3'剪切Edit_Click(0)Case4'復(fù)制Edit_Click(1)Case5'粘貼Edit_Click(2)EndSelectEndSub=3\*GB2⑶運行調(diào)試,程序運行的情況如圖7-13所示。圖7-13例7-15之運行情況7.5小結(jié)本章介紹了文件的基本概念及其操作使用方法。打開文件或保存文件是Windows應(yīng)用程序的基本操作,在VB中通過使用盤驅(qū)動器列表框(DriveListBox)、目錄路徑列表框(DirListBox)以及文件列表框(FileListBox)3種控件組合起來的對話框?qū)崿F(xiàn),設(shè)計這種對話框的關(guān)鍵是3個同步關(guān)系需要通過編程來實現(xiàn)。讀者可以同第6章介紹的通用對話框進行比較,分析兩者在功能上的相似性及操作使用上的不同處。對文件的操作還包括建立文件,在文件中查找,追加、刪除或修改數(shù)據(jù)等。這些操作在數(shù)據(jù)文件的應(yīng)用中都有所涉及,讀者可以參考有關(guān)例子進行總結(jié)分析。習(xí)題七一、判斷題1.運行時盤驅(qū)動器的List屬性可以用AddItem和RemoveItem兩種方法來改變。2.在盤驅(qū)動器列表框Drive1的Change事件過程中,代碼Dir1.Path=Drive1.Drive的作用是:當(dāng)Drive1

溫馨提示

  • 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

提交評論