




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、YCF正版可修改PPT(中職)可視化編程應用Visual Basic模塊7 文件的管理電子課件模塊7 文件的管理任務1 文件的結(jié)構(gòu)及訪問類型任務2 文件的處理任務3 文件處理常用命令、函數(shù)及語句任務4 文件管理控件任務1 文件的結(jié)構(gòu)及訪問類型 在計算機科學技術(shù)中,常用“文件”一同來表示輸入輸出操作的對象。所謂“文件”,是指記錄在外部介質(zhì)上的數(shù)據(jù)集合。例如,用Word或Excel編輯制作的文檔或表格就是一個文件,把它存儲到磁盤上就是一個磁盤文件,輸出到打印機上就是一個打印機文件。廣義地說,任何輸入輸出設(shè)備都是文件。計算機以這些設(shè)備為對象進行輸入輸出,對這些設(shè)備統(tǒng)一按“文件”進行處理。 在程序設(shè)計
2、中,文件是有用而且不可缺少的。這是因為: 文件是使一個程序可以對不同的輸入輸出進行加工處理、產(chǎn)生相應的輸出結(jié)果的常用手段 使用文件可以方便用戶,提高上機效率; 使用文件可以不受內(nèi)存大小的控制。因此,文件是重要的,在某些情況下,不使用文件將很難解決所遇到的實際問題。下一頁返回任務1 文件的結(jié)構(gòu)及訪問類型7.1.1文件結(jié)構(gòu) 文件有效地存儲數(shù)據(jù),數(shù)據(jù)必須以某種特定的方式存放,這種特定的方式稱為文件結(jié)構(gòu)。VB 6. 0的文件由記錄組成,記錄由字段組成,字段由字符組成。 (1)字符(Character):是構(gòu)成文件的最重要的單位。字符可以是數(shù)字、字母、特殊符號或單一字符。這里所說的“字符”一般稱為西文字
3、符,一個西文字符用一個字節(jié)存放。如果為漢字字符,包括漢字和“全角”字符,則通常用兩個字節(jié)來存放。也就是說一個漢字字符相當于兩個西文字符。一般把用一個字節(jié)存放的西文字符稱為“半角”字符,而把漢字和兩個字節(jié)存放的字符稱為“全角”字符。注意,VB 6. 0支持雙字節(jié)字符,當計算字符串長度時,一個西文字符和一個漢字都作為一個字符計算,但它們所占的空間是不一樣的。例如,字符串“VB 6. 0程序設(shè)計”的長度為6,而所占的字節(jié)數(shù)為l0。上一頁下一頁返回任務1 文件的結(jié)構(gòu)及訪問類型 (2)字段(Field):也稱域。字段由若干字符組成,用來表示一項數(shù)據(jù)。例如,郵政編碼“100084”就是一個字段,它由6個字
4、符組成;而姓名“李遠哲”也是一個字段,它由3個漢字組成。 (3)記錄(Record:由一組相關(guān)的字段組成。例如,在通訊錄中,每個人的姓名、單位、地址、電話號碼、郵政編碼等構(gòu)成一個記錄,如表7-1所示。在VB 6. 0中,以記錄為單位處理數(shù)據(jù)。 (4)文件(File):文件由記錄組成,一個文件含有一個以上的記錄。例如,在通訊錄文件中有100個人的信息,每個人的信息是一個記錄,這100個記錄構(gòu)成一個文件。上一頁下一頁返回任務1 文件的結(jié)構(gòu)及訪問類型7. 1. 2文件介類 根據(jù)不同的分類標準,文件可分為不同的類型。 (1)根據(jù)數(shù)據(jù)性質(zhì),文件可分為程序文件和數(shù)據(jù)文件。 程序文件(Program Fil
5、e):這種文件存放的是可以由計算機執(zhí)行的程序,包括源文件和可執(zhí)行文件。在VB 6. 0中,擴展名為.exe、. frm,. Vbg、. Vbp、. Bas、. cls等文件都是程序文件。 數(shù)據(jù)文件(Dale File):數(shù)據(jù)文件用來存放普通的數(shù)據(jù),如學生考試成績、職工工資、商品庫存等。這類數(shù)據(jù)必須通過程序來存放和管理。上一頁下一頁返回任務1 文件的結(jié)構(gòu)及訪問類型 (2)根據(jù)數(shù)據(jù)的存放方式和結(jié)構(gòu),文件可分為順序文件和隨機文件。 順序文件(Sequential File):順序文件的結(jié)構(gòu)比較簡單,文件的記錄一個接一個的存放。在這種文件中,只知道第一個記錄的存放位置,其他記錄的位置無從知道。當要查找
6、某個數(shù)據(jù)時,只能從文件頭開始,一個記錄一個記錄地按順序讀取,直至找到要查找的記錄為止。 順序文件的組織比較簡單,只要把數(shù)據(jù)記錄一個接一個的寫入文件中即可。但維護困難,為了修改文件中的某個記錄,必須把整個文件讀入內(nèi)存,修改后再重新寫入磁盤。順序文件不能靈活地存取和增減數(shù)據(jù),因而適用于有一定規(guī)律且不經(jīng)常修改的數(shù)據(jù)。其主要優(yōu)點是占空間少,容易使用。 上一頁下一頁返回任務1 文件的結(jié)構(gòu)及訪問類型 隨機存取文件(Random Access File):又稱直接存取文件,簡稱隨機文件或直接文件,與順序文件不同,在訪問隨機文件中的數(shù)據(jù)時,不必考慮各個記錄的排列順序或位置,可以根據(jù)需要訪問文件中的任何一個記錄
7、。對順序文件來說,文件中的各個記錄只能按實際排列的順序,一個一個地依次訪問。也就是說,在訪問第i個記錄之后,只能訪問第i+1個記錄,既不能訪問第i+2或第i+3個記錄,也不能訪問第i-1或第i-2個記錄。而對于隨機文件來說,所要訪問的記錄不受其位置的約束,可以根據(jù)需要直接訪問文件中的每個記錄。 上一頁下一頁返回 在隨機文件中,每個記錄的長度是固定的,記錄中每個字段的長度也是 固定的,此外,隨機文件的每個記錄都有一個記錄號,在寫入數(shù)據(jù)時,只要指定記錄號,就可以把數(shù)據(jù)直接存入指定的位置,而在讀取數(shù)據(jù)時,只要給出記錄號,就能直接讀取該記錄。在隨機文件中,可以同時進行讀、寫操作,因而能快速地查找和修改
8、每個記錄,而不必為修改某個記錄而對整個文件進行讀、寫操作。 隨機文件的優(yōu)點是數(shù)據(jù)的存取較為靈活、方便、速度較快、容易修改,主要缺點是占用空間較大,數(shù)據(jù)組織比較復雜。任務1 文件的結(jié)構(gòu)及訪問類型 (3)根據(jù)數(shù)據(jù)進行編碼的方式,文件可分為ASCII文件和二進制文件。 ASCII文件:又稱為文本文件,它以ASCII方式保存文件,這種文件可以用文字處理軟件(如記事本、Word)建立和修改(必須按純文本方式保存)。 二進制文件(Binary File):以二進制方式保存的文件,二進制文件不能用普通的字處理軟件編輯,占空間小。上一頁返回任務1 文件的結(jié)構(gòu)及訪問類型任務2 文件的處理7. 2. 1順序文件的
9、處理 在順序文件中,記錄的邏輯順序與存儲順序相一致,對文件的讀寫操作只能一個記錄一個記錄順序進行。 順序文件的讀寫操作與標準輸入輸出十分類似。其中,讀操作是把文件中的數(shù)據(jù)讀到內(nèi)存;標準輸入是從鍵盤上輸入數(shù)據(jù),而鍵盤設(shè)備也可以看作是一個文件;寫操作是把內(nèi)存中的數(shù)據(jù)文件輸出到屏幕上,而屏幕設(shè)備也可以看作是一個文件。 1.順序文件的寫操作 前面講過,數(shù)據(jù)文件的寫操作分為3步,即打開文件、寫入文件和關(guān)閉文件。其中打開文件和關(guān)閉文件分別由Open和Close語句來實現(xiàn),寫入文件由Print或Write語句來完成。下一頁返回任務2 文件的處理 1)Print語句 格式:Print 文件號,spc(n)|t
10、ab(n)表達式;|, Print語句的功能是把數(shù)據(jù)文件寫入文件中。以前曾多次用到Print方法,Print語句與Print方法類似。Print方法所“寫”的對象是窗體、打印機或控件,而Print語句所“寫”的對象是文件。 在上面的格式中,“文件號”的含義同前,數(shù)據(jù)寫入此文件號所代表的文件中。其他參數(shù),包括Spc函數(shù)、Tab函數(shù)、“表達式表”及尾部的分號、逗號等,其含義與Print方法中相同。 例如: 上一頁下一頁返回任務2 文件的處理 Print#1 A,B,C 把變量A、B、C的值寫到文件號為1的文件中。而Print A,B,C 則把變量A,B,C的值“寫”到窗體上。 說明: (1)格式中
11、的“表達式表”可以省略,在這種情況下將向文件寫入一個空行。例如,Print 1。 (2)和Print方法一樣,Print語句中的各數(shù)據(jù)項之間可以用分號隔開,也可以用逗號隔開,分別對應緊湊格式和標準格式。數(shù)值數(shù)據(jù)由于前面有符號位,后面有空格,因此使用分號不會給以后讀取文件造成麻煩。但是,對于字符串數(shù)據(jù),特別是變長字符串數(shù)據(jù),用分號分隔就有可能引起麻煩,因為輸出的字符串之間沒有空格。上一頁下一頁返回任務2 文件的處理 (3)實際上,Print語句的任務只是將數(shù)據(jù)送到緩沖區(qū),數(shù)據(jù)由緩沖區(qū)寫到磁盤文件的操作是由文件系統(tǒng)來完成的。對于用戶來說,可以理解為由Print語句直接將數(shù)據(jù)寫入磁盤文件。但是,執(zhí)行
12、Print語句后,并不是立即把緩沖數(shù)據(jù)區(qū)中的內(nèi)容寫入磁盤,只有在滿足下列條件之一時才寫盤。 關(guān)閉文件(Close) 緩沖區(qū)已滿 緩沖區(qū)末滿,但執(zhí)行下一個Print語句。上一頁下一頁返回任務2 文件的處理 【例7-1】編寫程序,用Print語句向文件中寫入數(shù)據(jù)運行如圖7-1的運行結(jié)果。 Private Sub Form Load() Open e:temptel. dat For Output As 1 Tpname $ =Text1 .Text tpte1 $ = Text2 .Text lpassr$= Text3 .Text Print 1,Tpname$,tptel$,tpassr$ C
13、lose 1 End Sub 上述過程首先在e盤的temp目錄下建立一個名為“tel. dat”的輸出文件,文件號為1。然后在3個輸入對活框中分別輸入姓名、電活號碼、地址,程序用Print語句把輸入的數(shù)據(jù)寫入文件“tel. dat”中。最后用Close語句關(guān)閉文件。上一頁下一頁返回任務2 文件的處理 2)Write 語句 格式:Write文件號,表達式表 和Print語句一樣,用Write語句可以把數(shù)據(jù)寫入順序文件中。例如: Write 1,A,B,C 將把變量A、B 、C的值寫入文件號為1的文件中。 說明: (1)“文件號”和“表達式表”的含義同前。當使用Write語句時,文件必須以outp
14、ut或Append方式打開?!氨磉_式表”中的各項以逗號分開。 (2) Write語句和Print語句的功能基本相同,其主要區(qū)別有以下兩點。 當用Write語句向文件寫數(shù)據(jù)時,數(shù)據(jù)在磁盤上以緊湊格式存放,能自動地在數(shù)據(jù)項之間插入逗號,并給字符串加上雙引號,一旦最后一項被寫入,就插入新的一行。 用Write語句寫入的正數(shù)前沒有空格。上一頁下一頁返回任務2 文件的處理例7 -2在磁盤上建立一個電活號碼文件,存放單位名稱和該單位的電活 號碼。Private Sub Form-Click()Open e:temptel. dal For Output As#1unti$=InputBox$( enter
15、 unit: )While UCase( unit$)DONETel $ = InputBox$( telephone number: )Write#1,unit$,tel $unit$=InputBox( enter unit: )WendClose#1End Sub上一頁下一頁返回任務2 文件的處理 上述程序反復地從鍵盤上輸入單位名稱和電話號碼,并寫到磁盤文件“tel. dal”中,直到輸入“DONE”為止。讀者可以把該程序建立的文件與上例建立的文件進行比較,看它們有了什么區(qū)別(用“記事本”查看)。 如果需要向電話號碼文件中追加到新的電話號碼,則須把操作方式由Output改為Append,
16、即把語句改為: Open“e:tel. dal” for append As#1。實際上,由于Append方式兼有建立文件的功能,因此最好在開始建立文件時就使用Append方式。 由Open語句建立的順序文件是ASCII文件,可以用字處理程序來查看或修改。順序文件由記錄組成,每一個記錄是一個單一的文本行,它以回車換行序列結(jié)束。每個記錄又被分割以具有不同的長度,不同記錄中的字段的長度也可以不一樣。 當把一個字段存入變量時,存儲字段的變量的類型決定了該字段的開頭和結(jié)尾。當把字段存入字符串變量時,下列符號標識出字符串的結(jié)尾。 上一頁下一頁返回任務2 文件的處理 雙引號(”):當字符串以雙引號開頭時。
17、 逗號(,):當字符串不以雙引號開頭時。 回車一換行:當字段位于記錄的結(jié)束處時。 如果把字段寫入一個數(shù)值變量,則下列符號標識出字段的結(jié)尾。 逗號。 一個或多個空格。 回車一換行。上一頁下一頁返回任務2 文件的處理 【例7一3】從鍵盤上輸入4個學生的數(shù)據(jù),然后把它們存放到磁盤文件中。學生的數(shù)據(jù)包括姓名、學號、年齡和住址,用一個記錄類型來定義。 操作步驟如下。 (1)選擇“工程”菜單中的“添加模塊”命令,建立標準模塊,定義如下記錄類型。 Type stu Stuname as string*10 Num as integer Age as integer Addr as string*20 End
18、 type 將該模塊以文件名“例10. 4Module. bas”存盤。上一頁下一頁返回任務2 文件的處理 (2)在窗體層輸入如下代碼。 Option base 1 (3)編寫如下的窗體事件過程。 Private Sub Form-Click() Static stud() As stu Open e:tempstu_lis1 For Output As#1 n=InputBox( enter number of student: ) ReDim stud(n)As stu For i=1 To n stud(i).stuname=InputBox$( enter name: ) stud(i
19、).num=InputBox$( enter number: ) stud(i).age=InputBox$( enter age: ) stud(i).adds=InputBox$( enter address: ) Write#1,stud(i).stuname,stud(i).num,stud(i).age,stud(i).adds Next Close#1 End End Sub上一頁下一頁返回任務2 文件的處理 該過程首先定義一個記錄數(shù)組(大小未定),打開一個輸出文件“stu list(在P盤temp目錄下)。接著詢問要輸入的學生人數(shù),輸入后重新定義數(shù)組。然后用For循環(huán)從鍵盤上輸入
20、每個學生的姓名、學號、年齡和住址,并用Write語句寫入磁盤文件中。最后關(guān)閉文件,退出程序。程序運行結(jié)束后,屏幕上并沒有信息輸出,只要把從鍵盤上輸入的數(shù)據(jù)寫到磁盤文件中??梢栽谧痔幚碥浖胁榭丛撐募膬?nèi)容: “李遠哲”,2001,20,晉城” “馬遠明”,2002,17,“上海” “陳圓”,1999,22,“北京” “陳石”,1997,23,“天津”上一頁下一頁返回任務2 文件的處理 2.順序文件的讀操作 順序文件的讀操作分3步進行,即打開文件、讀數(shù)據(jù)文件和關(guān)閉文件。其中打開文件和關(guān)閉文件的操作如前所述,讀數(shù)據(jù)的操作由 Input#語句和Line Input#語句來實現(xiàn)。 1)lnput 語句
21、 格式:Input#文件號,變量表 Input#語句從一個順序文件中讀出數(shù)據(jù)項,并把這些數(shù)據(jù)項賦給程序變量。例如: Input#1,A,B,C 從文件中讀出三個數(shù)據(jù)項,分別把它們賦值給A,B,C三個變量。上一頁下一頁返回任務2 文件的處理 說明: (1)“文件號”的含義同前?!白兞勘怼庇梢粋€或多個變量組成,這些變量既可以是數(shù)值變量,也可以是字符串變量或數(shù)組元素,從數(shù)據(jù)文件中讀出的數(shù)據(jù)賦給這些變量。文件中數(shù)據(jù)項的類型應與Input#語句中變量的類型匹配。 (2)在用Input#語句把讀出的數(shù)據(jù)項賦給數(shù)值變量時,將忽略前導空格、回車或換行符,把遇到的第一個非空格、非回車或換行符作為數(shù)值的開始,遇到
22、空格、回車或換行符則認為數(shù)值結(jié)束。對字符串數(shù)據(jù),同樣忽略開頭的空格、回車或換行符,需要把開頭帶有空格的字符串賦給變量,則必須把字符串放在雙引號中。 (3) Input#與Inputbox函數(shù)類似,但Inputbox函數(shù)要求從鍵盤上輸入數(shù)據(jù),而Input#語句要求從文件中輸入數(shù)據(jù),而且執(zhí)行Input#語句時不顯示對話框。 (4) Input#語句也可以用于隨機文件。上一頁下一頁返回任務2 文件的處理 【例7 -4】把前面建立的學生數(shù)據(jù)表(stu-list)讀到內(nèi)存,并在屏幕上顯示出來。該程序的標準模塊仍使用例10. 4中的“例10. 4Module. bas,窗體層代碼也與例10. 4相同,窗體
23、事件過程如下: Private Sub Form-Click() Static stud() As stu Open e:temp stu-list For Input As#1 n=InputBox( enter number of student: ) ReDim stud(n As stu FontSize=12 Print 姓名;Tab(20); 性別;Tab(30); 年齡;Tab(40); 住址 Print For i=1 To n Input#1,stud(i).stuname,stud(i).num,stud(i),age,stud(i),adds Print stud(i),
24、stuname; Tab(20);stud(i).num;Tab(30);stud(i).age;Tab(40);stud(1). Next i Close#1 End Sub上一頁下一頁返回任務2 文件的處理 該過程首先以輸入方式打開文件stu-list,數(shù)組定義方式與前面的程序相同。在for循環(huán)中,用Input語句讀入4個學生的數(shù)據(jù),并在窗體上顯示出來。程序運行后,單擊窗體,在輸入對話框中輸入4,然后單擊“確定”按鈕,執(zhí)行結(jié)果如圖7-2所示。 但是當需要輸入幾十個、上百個甚至更多的數(shù)據(jù)時,如果用InputBox函數(shù)一個一個地輸入,效率太低。這個問題可以通過Input語句從文件中讀取數(shù)據(jù)來解
25、決。請看下面的例子。上一頁下一頁返回任務2 文件的處理 2)Line lnput語句 格式:Line Input文件號,字符串變量 Line Input語句從順序文件中讀取一個完整的行,并把它賦值給一個字符串變量。“文件號”的含義同前。“字符串變量”是一個字符串簡單變量名,也可以是一個字符串數(shù)組元素名,用來接受從順序文件中讀出的字符行。在文件操作中,Line Input語句與Input語句功能類似。只是Input語句讀取的是文件的數(shù)據(jù)項,而Line Input語句讀取的是文件中的一行。Line Input語句也可以用于隨機文件。Line Input語句常用來復制文件。上一頁下一頁返回任務2 文
26、件的處理【例7 -5】編寫程序,在文件中查找指定字符串。程序代碼如下:Private Sub Form-Click()q $ = InputBox ( 請輸入要查找的字符串)Open e:tel. dal For Input As#1x$=Input$ (LOF (1),1)Closey=InStr (1,x$,q$)If v0 ThenPrint 找到字符串;asElsePrint 未找到字符串;asEnd IfEnd sub上一頁下一頁返回任務2 文件的處理7.2.2隨機文件 隨機文件有以下特點。 (1)隨機文件的記錄是定長記錄,只有給出記錄號n,才能通過“(n-1)*記錄長度”公式計算出
27、該記錄與文件首記錄的相對地址。因此,在用Open語句打開文件時必須指定記錄的長度。 (2)每個記錄劃分為若干個字段,每個字段的長度等于相應的變量的長度。 (3)各個變量(數(shù)據(jù)項)要按一定的格式輸入相應的字段。 (4)打開隨機文件,既可讀也可寫。 隨機文件以記錄為單位進行操作。上一頁下一頁返回任務2 文件的處理 1.隨機文件的打開與讀寫操作 隨機文件與順序文件的讀寫操作類似,但通常把需要讀寫的記錄中的各個字段放在一個記錄類型中,同時指定每個記錄的長度。 1)隨機文件的寫操作 隨機文件的寫操作分為4步。 (1)定義數(shù)據(jù)類型。隨機文件由固定長度的記錄組成,每個記錄含有若干字段。記錄中各個字段可以放在
28、一個記錄中,記錄類型用Typeend Type語句定義。Typeend Type語句通常在標準模塊中使用,如果放在窗體模塊中,則應加上Private (2)打開隨機文件。與順序文件不同,打開一個隨機文件后,既可以用于寫操作,也可以用于讀操作。 格式:Open文件名稱For Random A*文件號Len =記錄長度 “記錄長度”等于各個字段長度之和,以字符(字節(jié))為單位。如果省略(Len =記錄長度),則記錄的默認長度為128個字節(jié)。 (3)將內(nèi)存中的數(shù)據(jù)寫入磁盤。隨機文件的寫操作通過Put語句來實現(xiàn)。 格式:Put 文件號,記錄號,變量上一頁下一頁返回任務2 文件的處理 (4)因為要存儲寫入
29、的變量的類型信息,所以由Len子句所指定的記錄長度應大于或等于所要寫的數(shù)據(jù)的長度。如果寫入的變量是一個變長字符串,則Len子句所指定的記錄長度至少應比字符串的實際長度多兩個字節(jié);如為變體類型,則應多4個字節(jié)。 2)隨機文件的讀操作 從隨機文件中讀取數(shù)據(jù)的操作與寫文件操作步驟類似,只是把第3步中的Put語句用Get語句來代替。 格式:Get 文件號,記錄號,變量 Get語句把由“文件號”指定的磁盤文件中的數(shù)據(jù)讀到“變量”中?!坝涗浱枴钡暮x同前。上一頁下一頁返回任務2 文件的處理 2.隨機文件記錄的增加與刪除 1)增加記錄 在隨機文件中增加記錄,實際上是在文件的末尾添加記錄。前面的File_ w
30、rite過程具有建立和增加記錄兩種功能,因為打開一個已經(jīng)存在的文件,則寫入的新記錄將添加到該文件后面。運行前面的程序,在對活框中輸入1,單擊“確定”按鈕,然后輸入記錄。 輸入結(jié)束后,回到選擇對活框,輸入2,單擊“確定”按鈕,將顯示文件中所有記錄,新增記錄已附在原記錄的后面。 2)刪除記錄 在隨機文件中刪除一個記錄,并不是真正刪除記錄,而是把下一個記錄重新寫到要刪除的記錄位置上,其后所有的記錄依次前移。上一頁下一頁返回任務2 文件的處理7. 2. 3二進制文件 二進制文件是所有打開方式中最自由的,它只把文件中的數(shù)據(jù)看作是一堆0與1的集合,對這些數(shù)據(jù)如何解釋,完全只看用(el語句讀取它們時,所使用
31、的變量類型。當所要處理的文件格式既不是文本文件,又沒有統(tǒng)一的數(shù)據(jù)格式時,通常就會以二進制方式處理。 二進制的使用和隨機文件極為相似,同樣是利用Put與Get來讀寫數(shù)據(jù),它們之間的區(qū)別有以下幾點。 (1)不需要指定Len,因為二進制讀、寫比隨機文件自由。 (2)對于不定長度字符串,在保存文件時將不會保存它的長度信息。 (3)由于不記錄字符串的長度,所以在Get中使用不定長字符串時,讀取的字符數(shù)將等于該字符串原先的長度。上一頁下一頁返回任務2 文件的處理 例7一6二進制文件的讀寫。 在這個例子中,把文件的內(nèi)容先用“0123456789二”填充,接著由文件的第一個位置讀取一個不定長度字符串Q,此字符
32、串Q的初始長度為5,所以在運行完成以后,Q的內(nèi)容將是“01234 程序代碼如下: Private Sub Command1-Click() f=Free File Dim x As Integer Open e:text. txt For Binary As#1 Len=Len(x) For x=0 To 99 Put#f , ,CStr(x) Next q= AAAAA Get#f, l,q Print q Close End Sub上一頁返回任務3 文件處理常用命令、函數(shù)及語句7. 3 .1 文件的建立與打開 如前所述,在對文件進行操作之前,必須先打開或建立文件,VB 6. 0用Open語
33、句打開或建立一個文件。 格式:Open文件說明For方式 Access存取類型鎖定As 文件號Len=記錄長度 Open語句的功能:為文件的輸入輸出分配緩沖區(qū),并確定緩沖區(qū)所使用的是要打開或建立的文件名,包含文件所在路徑。其他參數(shù)的含義如下。 (1)方式。指定文件的輸入輸出方式,可以是下述方式之一。 Output:指定順序輸出方式。 Input:指定順序輸入方式。 Append:指定順序輸出方式。與Output不同的是,當用Append方式打開文件時,文件被定位在文件末尾,如果對文件執(zhí)行寫操作,則寫入的數(shù)據(jù)附加到原來文件的后面。 下一頁返回任務3 文件處理常用命令、函數(shù)及語句 Random:指
34、定隨機文件存取方式,也是默認方式,在Random方式中,如果沒有Access子句,則在執(zhí)行0 pen語句時,VB 6. 0試圖按如下順序打開文件:()讀/寫;()只讀;()只寫。 Binary:指定二進制方式文件。在這種方式下,可以用Get和Put語句對文件中任何字節(jié)位置的信息進行讀寫,在Binary方式中,如果沒有Access子句,則打開文件類型與Random方式相同。“方式”是可選的,如果省略,則為隨機存取方式,即Random (2)存取類型。放在關(guān)鍵字Access之后,用來指定訪問文件的類型??梢允窍铝蓄愋椭?。 Read:打開只讀文件。 Write:打開只寫文件。 Read Write
35、:打開讀寫文件。這種類型只對隨機文件、二進制文件及用Append方式打開的文件有效。 “存取類型”指出了在打開的文件中所進行的操作,如果打開的文件已由其他程序打開,則不允許指定存取的類型,否則Open失敗,并產(chǎn)生錯誤信息。上一頁下一頁返回任務3 文件處理常用命令、函數(shù)及語句 (3)鎖定。該子句只在多用戶或多環(huán)境中使用,用來限制其他用戶或進程對打開的文件進行讀寫操作。鎖定類型包括以如下幾項。 默認:如果不指定鎖定類型,則本進程可以多次打開對該文件進行讀寫;在文件打開期間,其他進程不能對該文件進行讀寫操作。 Lock Shared:任何機器上的任何進程都可以多次對該進程進行讀寫操作。 Lock R
36、ead:不允許其他進程讀該文件,只有在沒有其他Read存取類型的進程訪問該文件時,才允許這種鎖定。 Lock Write:不允許其他進程寫這個文件。只有在沒有其他Write存取類型的進程訪問該文件時,才允許使用這種鎖定。 Lock Read Write:不允許其他進程讀寫這個文件。 如果不使用Lock子句,則默認為Lock Read Write。上一頁下一頁返回任務3 文件處理常用命令、函數(shù)及語句 (4)文件號。是一個整型的表達式。其值在1 511范圍內(nèi),執(zhí)行Open語句時,打開文件的文件號與一個具體的文件相關(guān)聯(lián),其他輸入輸出語句或函數(shù)通過文件號與文件發(fā)生聯(lián)系。 (5)記錄長度。是一個整型表達
37、式。當選擇該參數(shù)時,為隨機存取文件設(shè)置記錄的長度。對于用隨機訪問方式打開的文件,該值是記錄長度;對于順序文件,該值是緩沖字符數(shù)。“記錄長度”的值不能超過32 767字節(jié),對于二進制文件,將忽略Len子句。 上一頁下一頁返回任務3 文件處理常用命令、函數(shù)及語句7. 3. 2文件的關(guān)閉 文件的讀寫操作結(jié)束后,應將文件關(guān)閉。可以通過Close語句來實現(xiàn)。 格式:close 文件號 , 文件號 Close語句用來結(jié)束文件的輸入輸出操作。例如,假定用下面的語句打開文件: Open Price. dat For Output as 1 則可以用下面的語句關(guān)閉該文件: Close 說明: (1) Close
38、語句用來關(guān)閉文件,是在打開文件之后進行的操作。格式中的“文件號”是Open語句中使用的文件號。關(guān)閉一個數(shù)據(jù)文件具有兩方面的作用:第一,把文件緩沖區(qū)中的所有數(shù)據(jù)寫到文件中;第二,釋放與文件相聯(lián)系的文件號,以供其他Open語句使用。上一頁下一頁返回任務3 文件處理常用命令、函數(shù)及語句 (2)Close語句中的“文件號”是可選的,如果指定了文件號,則把指定的文件關(guān)閉;如果不指定文件號,則把所有打開的文件全部關(guān)閉。 (3)除了用Close語句關(guān)閉文件外,在程序結(jié)束時還將自動關(guān)閉所有打開的數(shù)據(jù)文件。 (4) Close語句使VB 6. 0結(jié)束對文件的使用,它的操作十分簡單,但絕不是可有可無的,這是因為磁
39、盤文件同內(nèi)存之間的信息交換是通過緩沖區(qū)進行的。如果關(guān)閉的是為順序輸入輸出而打開的文件,則緩沖區(qū)中最后的內(nèi)容將被寫入文件中,當打開的文件或設(shè)備正在輸出時,執(zhí)行Close語句后,不會使輸出信息的操作中斷。如果不使用Close語句關(guān)閉文件,則可能使某些需要寫入的數(shù)據(jù)不能從內(nèi)存(緩沖區(qū))送入文件中。上一頁下一頁返回任務3 文件處理常用命令、函數(shù)及語句7.3.3文件指針 文件被打開后,自動生成一個文件指針(隱含的),文件的讀或?qū)懢褪菑倪@個指針所指位置開始的。用Append方式打開一個文件后,文件指針指向文件的末尾。而如果用其他幾種方式打開文件,則文件指針指向文件的開頭。依次完成讀寫操作后文件指針自動移到
40、下一個讀寫操作的起始位置,移動量的大小由Open語句中的參數(shù)共同決定。對于隨機文件,其文件指針的最小移動單位是一個記錄長度;而順序文件中文件指針移動的長度與它所讀寫的字符串的長度相同。在VB 6. 0中,與文件指針有關(guān)的語句和函數(shù)是Seek。 文件指針的定位通過Seek語句來實現(xiàn)。 格式: Seek 文件號,位置 Seek語句用來設(shè)置文件中下一個讀寫的位置?!拔募枴钡暮x同前;“位置”是一個數(shù)值表達式,用來指定下一個要讀寫的位置,其值在1(231-1)范圍內(nèi)。上一頁下一頁返回任務3 文件處理常用命令、函數(shù)及語句 說明: (1)對于用Input,0utput或Append方式打開的文件,“位置
41、”是從文件開頭到“位置”為止的字節(jié)數(shù),即執(zhí)行下一個操作的地址,文件的第一個字節(jié)的位置是1。對于用Random方式打開的文件,“位置”是一個記錄號。 (2)在Get或Put語句中的記錄號優(yōu)先于由Seek語句確定的位置。此外,當“位置”為?;蜇摂?shù)時,將產(chǎn)生錯誤信息“錯誤的記錄號”。當Seek語句中的“位置”在文件尾時,對文件的寫操作將擴展該文件。 Seek函數(shù)是與Seek語句配合使用的。 格式: Seek(文件號) 對于用Input,0utput或Append方式打開的文件, Seek函數(shù)返回文件中的字節(jié)位置(產(chǎn)生一個操作的位置)。對于用Random方式打開的文件, Seek函數(shù)返回下一個要讀或?qū)?/p>
42、的記錄號。上一頁下一頁返回任務3 文件處理常用命令、函數(shù)及語句7. 3. 4常用的文件操作函數(shù) 1. FreeFile函數(shù) 用FreeFile函數(shù)可以得到一個沒有使用過的文件號。當程序中打開的文件較多時,這個函數(shù)很有用。利用這個函數(shù)可以把未使用的文件號賦給一個變量,用這個變量作文件號,不必知道具體的文件號是多少。 【例7一7】用FreeFile Private Sub Command1 函數(shù)獲取一個文件號。 Click( ) FileName$=Text1. Text filenum=FreeFile Open FileName For Output As filenum Print File
43、Name; is upend as file ;FileName Close filenum End Sub上一頁下一頁返回任務3 文件處理常用命令、函數(shù)及語句 該過程把打開的文件的文件名賦給變量FileName $(從鍵盤上輸入),而把可以使用的文件號賦給變量Filenum,它們都出現(xiàn)在Open語句中。程序運行后,在輸入對活框中輸入“DF1. dat”,單擊按鈕,程序運行結(jié)果如圖7-3所示。 2. Loc函數(shù) 格式:Loc(文件號) Loc函數(shù)返回由“文件號”指定的文件的當前讀寫位置,是一個長整 數(shù)。格式中的“文件號”是在Open語句中使用的文件號。 對于隨機文件,Loc函數(shù)返回一個記錄號,
44、它是對隨機文件或讀寫最后一個記錄的記錄號,即當前讀寫位置的上一個記錄;對于順序文件,Loc函數(shù)返回自該文件被打開以來讀或?qū)懙挠涗泜€數(shù),一個記錄是一個模塊。上一頁下一頁返回任務3 文件處理常用命令、函數(shù)及語句 3. Lof函數(shù) 格式: Lof(文件號) Lof函數(shù)返回給文件分配的字數(shù)(即文件的長度),在VB 6. 0中,文件的基本單位是記錄,每個記錄的默認長度為128個字節(jié)。因此,對于由VB 6. 0建立的數(shù)據(jù)文件, Lof函數(shù)返回的將是128的倍數(shù),不一定是實際的字節(jié)數(shù)。例如,假定某個文件的實際長度是257(128 *2 +1)個字節(jié),則用Lof函數(shù)返回的是384 (128 * 3)個字節(jié)。對
45、于用其他編輯軟件或字處理軟件建立的文件, Lof函數(shù)返回的將是實際分配的字節(jié)數(shù),即文件的長度。上一頁下一頁返回任務3 文件處理常用命令、函數(shù)及語句 4. EOF函數(shù) 格式:EOF(文件號) EOF函數(shù)用來測試文件的結(jié)束狀態(tài),返回一個Boolean值(True或False)。利用EOF函數(shù),可以避免在文件輸入時出現(xiàn)“輸入超出文件尾”錯誤。因此,它是一個很有用的函數(shù)。在文件輸入期間,可以用EOF函數(shù)測試是否到達文件尾。對于順序文件來說,如果已經(jīng)到文件尾,則EOF函數(shù)返回True,否則返回False。對于隨機文件,如果最后執(zhí)行的Get語句未能讀到一個完整的記錄,則返回True,這通常發(fā)生在試圖讀文件
46、結(jié)尾以后的部分時。 EOF函數(shù)常用來在循環(huán)中測試是否已到文件尾。 格式: Do while Not EOF( ) 文件讀語句 Loop上一頁下一頁返回任務3 文件處理常用命令、函數(shù)及語句7. 3. 5文件基本操作語句 文件的基本操作語句指的是文件的刪除、復制、移動、重命名等。在VB6. 0中可以通過相應的語句執(zhí)行這些基本操作。 1. Kill語句 格式:Kill文件名 功能:從磁盤中刪除指定的文件,文件名可以含有路徑,可以使用通配符(*或?)。 因為在使用Kill語句刪除文件時不會出現(xiàn)任何提示,所以最好加上適當?shù)拇a,使得在刪除前提示用戶確認刪除操作。 例如: Private Sub Comm
47、and1-Click( ) h = MsgBox(確認要刪除該文件嗎?, vbYesNo, 提示信息) If h=vbYes Then Kill e: lemp te1.dal End Sub上一頁下一頁返回任務3 文件處理常用命令、函數(shù)及語句 2. FileCopy語句 格式:FileCopy源文件名,目標文件名 功能:復制一個文件,文件名可以含有路徑,但不能使用通配符(*或?)。 該語句不能復制一個已打開的文件,否則將產(chǎn)生錯誤信息。 例如: FileCopy e:tempstu list,d: stu_list VB 6. 0沒有提供移動文件的語句。實際上把Kill語句和FileCopy語
48、句結(jié)合使用,先用FileCopy語句復制文件,然后用Kill語句刪除源文件,即可實現(xiàn)文件移動。此外,用Name語句也可以移動文件。上一頁下一頁返回任務3 文件處理常用命令、函數(shù)及語句 3. Name語句 格式:Name原文件名 As 新文件名 功能:重新命名一個文件、目錄或文件夾,文件名是一個字符串表達式,可以含有路徑,但不能使用通配符。 在一般情況下,“原文件名”和“新文件名”必須在同一驅(qū)動器上。如果“新文件名”指定的路徑存在且與“原文件名”指定路徑不通,則Name語句將把文件移到新的目錄下,并更改文件名。如果“新文件名”與“原文件名”指定的路徑不同但文件名相同,則Name語句將把文件移到新
49、的目錄下。 當“原文件名”不存在,或“新文件名”已存在時,都會發(fā)生錯誤。 不能對已打開的文件重新命名,在重新命名之前必須先關(guān)閉該文件。 Name語句不能跨驅(qū)動器移動文件。上一頁返回任務4 文件管理控件 為了管理計算機中的文件,VB6. 0提供了文件系統(tǒng)控件,即驅(qū)動器列表框(DriveListBox)、目錄列表框(Directory ListBox)和文件列表框(File ListBox)。用這3個控件,可以編寫文件管理程序的應用界面,如圖7-4所示。Drive ListBox控件用來在運行時顯示用戶系統(tǒng)中所有有效磁盤驅(qū)動器列表。目錄列表框Directory ListBox用來在運行時顯示當前驅(qū)動器下的目錄和路徑,該控件可以顯示分層的目錄列表。File Listbox控件用來在運行時將Path屬性指定的目錄文件定位并列舉出來。該控件用來顯示所選擇文件類型的文件列表。根據(jù)需要可編寫代碼,使得Drive
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 股權(quán)價值評估協(xié)議書
- 豪華輪胎買賣協(xié)議書
- 藥店柜臺租賃協(xié)議書
- 日常護理2025年考試試題及答案
- 老年父母再婚協(xié)議書
- 蛋糕用品轉(zhuǎn)讓協(xié)議書
- 資產(chǎn)經(jīng)營轉(zhuǎn)讓協(xié)議書
- 籃球用品保護協(xié)議書
- 設(shè)備質(zhì)押借款協(xié)議書
- 舞蹈比賽報名協(xié)議書
- 2025屆湖北省武漢市高三英語質(zhì)量檢測試卷(一模)(附答案)
- 《深度學習項目案例開發(fā)》課件-任務二:使用卷積神經(jīng)網(wǎng)絡(luò)完成貓狗識別
- 2025年起重裝卸機械操作工(天車)職業(yè)技能理論考試題庫-上(單選題)
- 《重大交通事故案例分析》課件
- 綜合實踐 50有多大 抓抓數(shù)數(shù)(說課稿)-2024-2025學年一年級下冊數(shù)學蘇教版
- 2025年江蘇交通控股有限公司招聘筆試參考題庫含答案解析
- 中國國際工程咨詢有限公司招聘筆試沖刺題2025
- 《傷逝》課件.教學課件
- 周轉(zhuǎn)輪系傳動比計算實例機械設(shè)計基礎(chǔ)課件講解
- 【 課件】上海普通中小學課程方案
- 弱電項目安全施工應急預案(3篇)
評論
0/150
提交評論