C語(yǔ)言文件操作文件實(shí)用教案_第1頁(yè)
C語(yǔ)言文件操作文件實(shí)用教案_第2頁(yè)
C語(yǔ)言文件操作文件實(shí)用教案_第3頁(yè)
C語(yǔ)言文件操作文件實(shí)用教案_第4頁(yè)
C語(yǔ)言文件操作文件實(shí)用教案_第5頁(yè)
已閱讀5頁(yè),還剩54頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、重慶(zhn qn)電力高等??茖W(xué)?!颈菊?bn zhn)要點(diǎn)】 文件在計(jì)算機(jī)領(lǐng)域中是一個(gè)重要概念,其實(shí)質(zhì)是文件在計(jì)算機(jī)領(lǐng)域中是一個(gè)重要概念,其實(shí)質(zhì)是存儲(chǔ)在計(jì)算機(jī)外存上的一組相關(guān)信息的集合。文件的名存儲(chǔ)在計(jì)算機(jī)外存上的一組相關(guān)信息的集合。文件的名字是唯一的,并且作為其本身的操作字是唯一的,并且作為其本身的操作(cozu)標(biāo)志。與標(biāo)志。與任何程序設(shè)計(jì)語(yǔ)言一樣,任何程序設(shè)計(jì)語(yǔ)言一樣,C語(yǔ)言也提供了強(qiáng)大的機(jī)制來(lái)語(yǔ)言也提供了強(qiáng)大的機(jī)制來(lái)支持對(duì)文件的各類操作支持對(duì)文件的各類操作(cozu)。本章內(nèi)容圍繞著二進(jìn)。本章內(nèi)容圍繞著二進(jìn)制文件與文本文件的操作制文件與文本文件的操作(cozu)展開(kāi),具體闡述了對(duì)展

2、開(kāi),具體闡述了對(duì)它們的基本操作它們的基本操作(cozu)方法,對(duì)文件的讀出與寫入,方法,對(duì)文件的讀出與寫入,以及對(duì)文件的錯(cuò)誤檢測(cè)等做作初步介紹。以及對(duì)文件的錯(cuò)誤檢測(cè)等做作初步介紹。 第1頁(yè)/共58頁(yè)第一頁(yè),共59頁(yè)。重慶電力高等(godng)??茖W(xué)校11.1.1 文件(wnjin)的概念 文件(wnjin)(File):存放在外部介質(zhì)(如計(jì)算機(jī)硬盤、軟件、光盤、優(yōu)盤等)上的一組完整信息的集合。這些信息可為各國(guó)文字、圖形、圖像、電影、音樂(lè)、電子小說(shuō),甚至包括病毒程序等。11.1 文件的基本概念第2頁(yè)/共58頁(yè)第二頁(yè),共59頁(yè)。重慶電力高等(godng)??茖W(xué)校11.1.2 文件名稱文件名:是引用

3、文件的唯一的標(biāo)識(shí)符。文件名包括三個(gè)要素:文件路徑,是指文件在外部存儲(chǔ)(cn ch)器設(shè)置中的位置,路徑一般以分隔符“”來(lái)體現(xiàn)存儲(chǔ)(cn ch)位置的嵌套層次;如D:ProgramTCExample。 文件主名,命名規(guī)則遵循標(biāo)識(shí)符的命名規(guī)則。文件擴(kuò)展名(或稱文件后綴),在文件主名之后,以“.”符號(hào)分隔。用來(lái)反映文件的類型或性質(zhì)。11.1 文件(wnjin)的基本概念第3頁(yè)/共58頁(yè)第三頁(yè),共59頁(yè)。重慶電力高等(godng)??茖W(xué)校11.1.2 文件名稱文件擴(kuò)展名文件的性質(zhì)或類型.c.cC C語(yǔ)言源程序文件語(yǔ)言源程序文件.cpp.cppTC 3.0TC 3.0語(yǔ)言源程序文件語(yǔ)言源程序文件.bas

4、.basBasicBasic語(yǔ)言源程序文件語(yǔ)言源程序文件.txt.txt純文本文件純文本文件.dat.dat數(shù)據(jù)文件數(shù)據(jù)文件.doc.docWordWord文件文件.mdb.mdbAccessAccess數(shù)據(jù)庫(kù)文件數(shù)據(jù)庫(kù)文件.exe.exe可運(yùn)行的程序文件可運(yùn)行的程序文件可執(zhí)行的命令文件可執(zhí)行的命令文件.bmp.bmp位圖圖形文件位圖圖形文件.jpg.jpg壓縮格式的圖形文件壓縮格式的圖形文件.avi.avi微軟公司開(kāi)發(fā)的視頻格式文件微軟公司開(kāi)發(fā)的視頻格式文件.mp3.mp3壓縮的音樂(lè)文件壓縮的音樂(lè)文件常用(chn yn)文件擴(kuò)展名11.1 文件(wnjin)的基本概念第4頁(yè)/共58頁(yè)第四頁(yè),

5、共59頁(yè)。重慶電力(dinl)高等??茖W(xué)校11.1.3 兩種重要(zhngyo)的文件類型 文本文件(Text File),也稱為ASC文件。每一個(gè)字節(jié)(z ji)存儲(chǔ)一個(gè)ASC碼形式表示的字符。文本文件是可直接閱讀的,使用Word或Windows的記事本打開(kāi)即可看到文件的內(nèi)容。擴(kuò)展名為.txt的文件。 二進(jìn)制文件(Binary File)。這類文件將文件中的數(shù)據(jù)按照它的二進(jìn)制編碼的形式存儲(chǔ)。由于這類文件內(nèi)容是二進(jìn)制編碼,因而它無(wú)法直接使用記事本或Word打開(kāi)閱讀。一般的可執(zhí)行程序都為二進(jìn)制文件,如擴(kuò)展名為.exe或.com的文件即為二進(jìn)制文件。11.1 文件的基本概念第5頁(yè)/共58頁(yè)第五頁(yè),

6、共59頁(yè)。重慶電力(dinl)高等??茖W(xué)校11.1.3 兩種重要(zhngyo)的文件類型例如:有一個(gè)整型數(shù)據(jù)123,在兩種文件中的存放(cnfng)形式分別如圖11.1、圖11.2所示。0000000001111011001100010011001000110011圖11.1 在二進(jìn)制文件中的存放形式 圖11.2 在文本文件中的存放形式11.1 文件的基本概念第6頁(yè)/共58頁(yè)第六頁(yè),共59頁(yè)。重慶電力高等(godng)??茖W(xué)校11.1.3 兩種重要(zhngyo)的文件類型文本文件(wnjin)與二進(jìn)制文件(wnjin)的優(yōu)缺點(diǎn):文本文件的優(yōu)點(diǎn):字符輸出的操作中不需轉(zhuǎn)換直接輸出,十分方便。文

7、本文件的缺點(diǎn):一個(gè)字符占一個(gè)字節(jié),文件占用的存儲(chǔ)空間較多,讀寫時(shí)需要轉(zhuǎn)換,訪問(wèn)的時(shí)空效率不高。二進(jìn)制文件的優(yōu)點(diǎn):二進(jìn)制文件中的數(shù)據(jù)與數(shù)據(jù)的在內(nèi)存中的表示形式一致。占單元數(shù)與操作系統(tǒng)和數(shù)據(jù)類型有關(guān)。二進(jìn)制文件在存儲(chǔ)數(shù)據(jù)時(shí)非常緊湊,占用存儲(chǔ)空間較少;在讀寫時(shí)不需進(jìn)行轉(zhuǎn)換,具有較高的時(shí)空效率。二進(jìn)制文件的缺點(diǎn):二進(jìn)制文件無(wú)法直接以字符形式輸出,必須要經(jīng)過(guò)一個(gè)轉(zhuǎn)換過(guò)程。11.1 文件的基本概念第7頁(yè)/共58頁(yè)第七頁(yè),共59頁(yè)。重慶電力(dinl)高等??茖W(xué)校文件緩沖機(jī)制:當(dāng)程序(chngx)讀取文件內(nèi)容時(shí),系統(tǒng)先將外部文件中的一批批的數(shù)據(jù)放入一個(gè)文件緩沖區(qū)內(nèi),當(dāng)文件緩沖區(qū)中的數(shù)據(jù)達(dá)到一定數(shù)量后,才一次

8、性地將這些數(shù)據(jù)輸入到程序(chngx)的數(shù)據(jù)區(qū);反過(guò)來(lái),當(dāng)程序(chngx)向文件寫入數(shù)據(jù)時(shí),文件緩沖機(jī)制也是先將數(shù)據(jù)寫入到文件緩沖區(qū)中,當(dāng)數(shù)據(jù)寫完或緩沖區(qū)寫滿時(shí),才會(huì)一次性地將這些數(shù)據(jù)寫入到文件所在的外部設(shè)備中。文件緩沖區(qū):計(jì)算機(jī)系統(tǒng)為要處理的文件在內(nèi)存中單獨(dú)開(kāi)辟出來(lái)的一個(gè)存儲(chǔ)區(qū)間,在讀寫該文件時(shí),做為數(shù)據(jù)交換的臨時(shí)“存儲(chǔ)中轉(zhuǎn)站”。文件緩沖機(jī)制的原理見(jiàn)下圖。 引入文件緩沖機(jī)制的好處就是:能夠有效地減少對(duì)外部設(shè)備(如磁盤、打印機(jī)等)的頻繁訪問(wèn),減少內(nèi)存與外設(shè)間的數(shù)據(jù)交換,添補(bǔ)內(nèi)、外設(shè)備的速度差異,提高數(shù)據(jù)讀寫的效率。11.1.4 文件(wnjin)的緩沖機(jī)制11.1 文件的基本概念第8頁(yè)/共5

9、8頁(yè)第八頁(yè),共59頁(yè)。重慶(zhn qn)電力高等專科學(xué)校文件指針:C語(yǔ)言系統(tǒng)對(duì)文件的操作必須通過(guò)一個(gè)指向“FILE類型”的指針來(lái)實(shí)現(xiàn),我們稱這種指針為 “文件指針”。FILE類型:是C語(yǔ)言系統(tǒng)定義的一種標(biāo)準(zhǔn)(biozhn)類型,它實(shí)質(zhì)上是一個(gè)結(jié)構(gòu)體。該結(jié)構(gòu)體中定義了一組域,用來(lái)保存與文件相關(guān)的重要信息。不同的C語(yǔ)言系統(tǒng)對(duì)“FILE類型”的描述會(huì)略有不同,但基本信息是一致的。對(duì)文件的操作要通過(guò)定義一個(gè)指向FILE類型的文件指針變量來(lái)實(shí)現(xiàn)對(duì)文件的常規(guī)操作。這一指針變量被稱為文件指針。文件指針的定義形式:FILE *文件指針變量名;例如: FILE *myFile; /*定義了一個(gè)名為myFile

10、的文件指針。*/11.1.5 FILE指針(zhzhn)11.1 文件的基本概念第9頁(yè)/共58頁(yè)第九頁(yè),共59頁(yè)。重慶(zhn qn)電力高等??茖W(xué)校下面列出Turbo C系統(tǒng)對(duì)FILE類型的定義(該定義可從Turbo C的頭文件stdio.h中找到): typedef struct short level; /* level表明文件緩沖區(qū)的狀態(tài)是滿還是空*/ unsigned flags; /* flags為文件狀態(tài)標(biāo)志符 */ char fd; /* fd為文件描述符*/ unsigned char hold; /* hold為沒(méi)有文件緩沖區(qū)則不能獲得字符 */ short bsize;

11、/* bsize表明文件緩沖區(qū)的尺寸*/ unsigned char *buffer; /*指針buffer指向數(shù)據(jù)交換的緩沖區(qū)*/ unsigned char *curp; /*指針curp指向文件的當(dāng)前(dngqin)活動(dòng)指針*/ unsigned istemp; /* istemp表明文件是否是臨時(shí)文件 */ short token; /* token用于文件合法性檢查*/ FILE; 因此,使用文件操作的程序,必須寫上:#include “stdio.h”。11.1 文件(wnjin)的基本概念11.1.5 FILE指針第10頁(yè)/共58頁(yè)第十頁(yè),共59頁(yè)。重慶電力(dinl)高等??茖W(xué)

12、校C語(yǔ)言規(guī)定:每一個(gè)文件都必須設(shè)置一個(gè)位置指針(文件指針)來(lái)控制文件的訪問(wèn)位置,其規(guī)律如下。 文件打開(kāi)時(shí)指針自動(dòng)指向文件的開(kāi)始位置; 每讀取一個(gè)單元內(nèi)容文件位置指針自動(dòng)順序向后移動(dòng)(ydng)一定的偏移量(該偏移量的字節(jié)數(shù)由所讀取單元的數(shù)據(jù)類型決定); 讀到文件的結(jié)尾,則文件的位置指針指向一個(gè)特殊的位置EOF。 對(duì)文件進(jìn)行順序?qū)懖僮鲿r(shí),數(shù)據(jù)寫入到文件位置指針?biāo)赶虻奈恢?。寫入后文件位置指針自?dòng)向后移動(dòng)(ydng)到一個(gè)新的位置,等待下一次的寫入操作。 可將文件位置指針移動(dòng)(ydng)到任何位置,實(shí)現(xiàn)對(duì)文件的隨機(jī)讀寫訪問(wèn)。11.1.6 文件(wnjin)位置指針11.1 文件的基本概念第11頁(yè)/

13、共58頁(yè)第十一頁(yè),共59頁(yè)。重慶電力高等(godng)??茖W(xué)校 文件指針移動(dòng)到文件的最后一個(gè)字節(jié)時(shí),C語(yǔ)言系統(tǒng)(xtng)會(huì)返回文件的結(jié)束標(biāo)識(shí)符EOF。EOF是一個(gè)系統(tǒng)(xtng)常量,其值被定義為-1,是在頭文件stdio.h中被定義的。 stdio.h中的定義如下: # d e f i n e E O F ( - 1 ) / * E n d o f f i l e indicator */ 注意:EOF判斷文件是否結(jié)束只適用于文本文件,而不適用于二進(jìn)制文件;對(duì)于二進(jìn)制文件,直接使用feof()函數(shù)判斷文件是否結(jié)束,當(dāng)函數(shù)feof()的返回值為1,則表明文件位置指針已經(jīng)到達(dá)文件的結(jié)束位置,否

14、則返回值為0,則表明文件還未結(jié)束。函數(shù)feof()的判斷方法對(duì)于文本文件也是非常有效。11.1.7 文件(wnjin)結(jié)束符11.1 文件的基本概念第12頁(yè)/共58頁(yè)第十二頁(yè),共59頁(yè)。重慶電力高等(godng)??茖W(xué)校訪問(wèn)文件主要操作(cozu)過(guò)程如下:打開(kāi)文件(Open File):為文件準(zhǔn)備相應(yīng)的控制信息結(jié)構(gòu)體與文件緩沖區(qū),并在結(jié)構(gòu)體與文件之間、緩沖區(qū)與文件之間建立起關(guān)聯(lián);讀取文件操作(cozu)(Read File):將外部存儲(chǔ)介質(zhì)中文件存儲(chǔ)的信息讀取出來(lái)放在計(jì)算機(jī)內(nèi)存中;寫入文件操作(cozu)(Write File):將外界的信息存放到文件中去;關(guān)閉文件操作(cozu)(Clos

15、e File):將放于內(nèi)存中的文件數(shù)據(jù)寫回該文件,并釋放文件占用的內(nèi)存空間,切斷文件與內(nèi)存相應(yīng)數(shù)據(jù)區(qū)域的關(guān)聯(lián)。 11.1.8 訪問(wèn)(fngwn)文件11.1 文件的基本概念第13頁(yè)/共58頁(yè)第十三頁(yè),共59頁(yè)。重慶電力(dinl)高等??茖W(xué)??傊?,文件(wnjin)文件(wnjin)操作必須是:“先打開(kāi),后讀寫,最后關(guān)閉”。如下圖所示。11.1.8 訪問(wèn)(fngwn)文件11.1 文件的基本概念第14頁(yè)/共58頁(yè)第十四頁(yè),共59頁(yè)。重慶(zhn qn)電力高等??茖W(xué)校11.2.1 打開(kāi)(d ki)文件函數(shù)fopen()打開(kāi)文件使用fopen()fopen()函數(shù)實(shí)現(xiàn)。打開(kāi)文件格式為:FILE

16、FILE * *fp;fp;fp= fopen(fp= fopen(文件名, ,使用方式););文件名:為包含訪問(wèn)路徑的文件名字符串。打開(kāi)文件時(shí),一但發(fā)生以下情況時(shí),打開(kāi)文件操作(cozu)(cozu)會(huì)失敗,函數(shù)fopen()fopen()會(huì)返回一個(gè)不指向任何對(duì)象的NULLNULL值。文件所在的設(shè)備沒(méi)有準(zhǔn)備好;給定的路徑上沒(méi)有指定的文件;文件名拼寫錯(cuò)誤;試圖以不正確的使用方式打開(kāi)某個(gè)文件。編程中經(jīng)常檢測(cè)函數(shù)fopen()fopen()是否返回NULLNULL值來(lái)判斷打開(kāi)文件操作(cozu)(cozu)是否成功。11.2 文件的打開(kāi)與關(guān)閉第15頁(yè)/共58頁(yè)第十五頁(yè),共59頁(yè)。重慶(zhn qn

17、)電力高等??茖W(xué)校文件的使用(shyng)方式列表11.2.1 打開(kāi)(d ki)文件函數(shù)fopen()11.2 文件的打開(kāi)與關(guān)閉第16頁(yè)/共58頁(yè)第十六頁(yè),共59頁(yè)。重慶電力(dinl)高等??茖W(xué)校11.2.1 打開(kāi)(d ki)文件函數(shù)fopen()【例11111 1】 下面(xi mian)(xi mian)的程序試著打開(kāi)一個(gè)用于只讀的文本文件,并檢測(cè)打開(kāi)是否成功。#include #include void main()void main() FILE FILE * *fp;fp;fp=fopen(c:ExamplemyFile.txt ,r);fp=fopen(c:ExamplemyFi

18、le.txt ,r);if (fp=NULL)if (fp=NULL)printf(Failure to Open the Specified File!n);printf(Failure to Open the Specified File!n);exit(0); exit(0); 如果文件打開(kāi)成功,fpfp就指向myFile.txtmyFile.txt文件,否則fpfp的值為NULLNULL。當(dāng)文件打開(kāi)失敗,程序輸出相應(yīng)的錯(cuò)誤信息提示,并退出系統(tǒng)。 11.2 文件的打開(kāi)與關(guān)閉第17頁(yè)/共58頁(yè)第十七頁(yè),共59頁(yè)。重慶(zhn qn)電力高等??茖W(xué)校文件操作結(jié)束(jish)前,必須關(guān)閉文件。

19、執(zhí)行關(guān)閉文件操作時(shí),系統(tǒng)會(huì)對(duì)文件緩沖區(qū)中的數(shù)據(jù)寫入文件,并釋放文件指針指向的存放文件信息結(jié)構(gòu)體的內(nèi)存資源。否則可能會(huì)引發(fā)數(shù)據(jù)的丟失。關(guān)閉文件使用fclose()函數(shù)。格式如下:fclose(文件指針) ;其中的“文件指針”參數(shù),就是保存打開(kāi)文件操作時(shí)fopen函數(shù)返回值的FILE指針變量。 11.2.2 關(guān)閉(gunb)文件函數(shù)fclose()11.2 文件的打開(kāi)與關(guān)閉第18頁(yè)/共58頁(yè)第十八頁(yè),共59頁(yè)。重慶(zhn qn)電力高等??茖W(xué)校11.3 文件(wnjin)的順序讀寫 順序讀寫文件:是指對(duì)文件的訪問(wèn)次序要按照數(shù)據(jù)在順序讀寫文件:是指對(duì)文件的訪問(wèn)次序要按照數(shù)據(jù)在文件中的實(shí)際存放次序來(lái)

20、進(jìn)行,而不允許文件位置指針以文件中的實(shí)際存放次序來(lái)進(jìn)行,而不允許文件位置指針以跳躍的方式來(lái)讀取數(shù)據(jù)或插入到任意位置寫入數(shù)據(jù)。跳躍的方式來(lái)讀取數(shù)據(jù)或插入到任意位置寫入數(shù)據(jù)。 根據(jù)文件順序讀寫的信息規(guī)模,可將順序讀寫文件的根據(jù)文件順序讀寫的信息規(guī)模,可將順序讀寫文件的函數(shù)分為四類:函數(shù)分為四類: 一次讀寫一個(gè)字符;一次讀寫一個(gè)字符; 一次讀寫一個(gè)字符串;一次讀寫一個(gè)字符串; 以格式化控制方式一次操作多個(gè)類型數(shù)據(jù)對(duì)象的以格式化控制方式一次操作多個(gè)類型數(shù)據(jù)對(duì)象的讀寫函數(shù);讀寫函數(shù); 以數(shù)據(jù)塊為操作對(duì)象的讀寫函數(shù)。以數(shù)據(jù)塊為操作對(duì)象的讀寫函數(shù)。 下面下面(xi mian)(xi mian)分專題對(duì)這四類

21、函數(shù)進(jìn)行介紹。分專題對(duì)這四類函數(shù)進(jìn)行介紹。 第19頁(yè)/共58頁(yè)第十九頁(yè),共59頁(yè)。重慶(zhn qn)電力高等??茖W(xué)校11.3.1 字符(z f)讀寫函數(shù) 1. 讀取文件中一個(gè)字符的函數(shù)fgetc()fgetc()函數(shù)實(shí)現(xiàn)從一個(gè)指定的文件中讀取一個(gè)字符數(shù)據(jù)的功能。fgetc()函數(shù)的調(diào)用形式:c=fgetc(文件指針); 例如:FILE * fp; char c; c=fgetc(fp);fgetc()函數(shù)返回(fnhu)讀取的字符。如果文件位置指針移到了文件結(jié)尾,則返回(fnhu)EOF(其值為-1)。2. 寫入一個(gè)字符到文件的函數(shù)fputc()fputc()函數(shù)實(shí)現(xiàn)將一個(gè)字符數(shù)據(jù)寫入指定的

22、文件中去的功能。fputc()函數(shù)調(diào)用方式為:FILE * fp; char c; fputc(c,fp);fputc()函數(shù)具有返回(fnhu)值,當(dāng)向文件輸出字符成功,則返回(fnhu)輸出的字符,如果輸出失敗,則返回(fnhu)一個(gè)EOF。 11.3 文件的順序讀寫第20頁(yè)/共58頁(yè)第二十頁(yè),共59頁(yè)。重慶(zhn qn)電力高等??茖W(xué)校11.2.1 打開(kāi)文件(wnjin)函數(shù)fopen()【例11112 2】 打開(kāi)一個(gè)文本文件(wnjin)(wnjin),并為它寫入一些用戶輸入的字符。#include #include #include#includevoid main()void m

23、ain() FILE FILE * *fp;fp;char ch;char ch;fp=fopen(e:File.txt,w);fp=fopen(e:File.txt,w);if (fp=NULL)if (fp=NULL)printf(Failure to Open the Specified File!n);printf(Failure to Open the Specified File!n); exit(0); exit(0); printf(Please input data(#to stop input):n); /printf(Please input data(#to stop

24、input):n); /* *輸出提示信息* */ /ch=getchar(); /ch=getchar(); /* *接受第一個(gè)有效字符* */ /while(ch!=#)while(ch!=#)fputc(ch,fp); /fputc(ch,fp); /* *輸出到文件(wnjin)(wnjin)* */ /putchar(ch); /putchar(ch); /* *將字符顯示到屏幕* */ /ch=getchar(); ch=getchar(); putchar(10); /putchar(10); /* *向屏幕輸出一個(gè)換行符* */ /fclose(fp); /fclose(fp)

25、; /* *關(guān)閉文件(wnjin)(wnjin)* */ / 11.3 文件的順序讀寫第21頁(yè)/共58頁(yè)第二十一頁(yè),共59頁(yè)。重慶電力(dinl)高等??茖W(xué)校11.3.2 字符串讀寫函數(shù)(hnsh) 1. 讀取文件中讀取一個(gè)字符串的函數(shù)fgets()fgets()函數(shù)實(shí)現(xiàn)從一個(gè)文件指針指定的文件中讀取指定長(zhǎng)度字符串的功能。fgets()函數(shù)的一般調(diào)用形式為:fgets(str, n,fp);其中:參數(shù)fp為文件指針;參數(shù)str為字符數(shù)組,用來(lái)存放文件中讀取來(lái)的字符串;參數(shù)n則指定要獲取字符串的長(zhǎng)度。實(shí)際上fgets()函數(shù)最多只能從文件中獲取n-1個(gè)字符,但在讀取字符串的最后位置的后面,系統(tǒng)將

26、自動(dòng)添加一個(gè)0字符。如果函數(shù)在讀取n-1個(gè)字符之前碰到了換行符n或文件結(jié)束符EOF,則系統(tǒng)會(huì)中止讀入,并將遇到的換行符也作為有效(yuxio)的讀入字符。fgets()函數(shù)在執(zhí)行成功以后,會(huì)將字符數(shù)組str的地址作為返回值,如果讀取數(shù)據(jù)失敗或一開(kāi)始讀就遇到了文件結(jié)束符,則返回一個(gè)NULL值。11.3 文件的順序讀寫第22頁(yè)/共58頁(yè)第二十二頁(yè),共59頁(yè)。重慶電力(dinl)高等??茖W(xué)校11.3.2 字符串讀寫函數(shù)(hnsh) 2. 寫入一個(gè)字符串到文件的函數(shù)fputs()fputs()函數(shù)實(shí)現(xiàn)將一個(gè)字符串寫入到指定的文件中去的功能。fputs()函數(shù)的一般調(diào)用形式為:fputs(str,fp)

27、;fputs()函數(shù)具有整型的返回值,當(dāng)向文件輸出字符串操作成功(chnggng)時(shí),則返回0值,如果輸出失敗,則返回一個(gè)EOF(-1)。 注意:fputs()函數(shù)并不將字符串str尾部的結(jié)束符“0”寫入文件。字符串在文件中作為獨(dú)立的一行,需要用fputs(“n”,fp)語(yǔ)句為這一字符串添加一個(gè)換行符;否則連續(xù)輸出的多個(gè)字符串成為一個(gè)整體,這樣在今后的讀取數(shù)據(jù)時(shí)就無(wú)法將這些字符串有效的區(qū)分開(kāi)來(lái)。11.3 文件的順序讀寫第23頁(yè)/共58頁(yè)第二十三頁(yè),共59頁(yè)。重慶(zhn qn)電力高等專科學(xué)?!纠?1.311.3】 用字符串讀函數(shù)實(shí)現(xiàn)對(duì)文本文件內(nèi)容的讀取,并將行號(hào)和每行的數(shù)據(jù)顯示到屏幕上。#i

28、nclude stdio.h#include stdio.h#includewindows.h#includewindows.hvoid main()void main() char buffer256; / char buffer256; /* *定義數(shù)據(jù)緩沖區(qū)與文件名變量* */ / FILE FILE * *fp;fp; int lineNum =1; / int lineNum =1; /* *定義用于顯示行號(hào)的變量lineNumlineNum* */ /fp=fopen(e:File.txt,r);fp=fopen(e:File.txt,r);if (fp=NULL)if (fp=N

29、ULL)printf(Failure to Open the Specified File!n);printf(Failure to Open the Specified File!n);exit(0); exit(0); while(fgets(buffer,256,fp)!=NULL) while(fgets(buffer,256,fp)!=NULL) printf(%3d:%s, lineNum,buffer); / printf(%3d:%s, lineNum,buffer); /* *顯示行號(hào)與一行(yxng)(yxng)數(shù)據(jù)* */ / lineNum+; / lineNum+;

30、/* *行號(hào)變量自增* */ / fclose(fp); / fclose(fp); /* *關(guān)閉文件* */ /11.3 文件(wnjin)的順序讀寫11.3.2 字符串讀寫函數(shù) 第24頁(yè)/共58頁(yè)第二十四頁(yè),共59頁(yè)。重慶(zhn qn)電力高等??茖W(xué)校11.3.3 格式化讀寫函數(shù)(hnsh) 1.格式化輸入函數(shù)fscanf()fscanf ()函數(shù)實(shí)現(xiàn)從指定的文件中將一系列指定格式的數(shù)據(jù)讀取出來(lái)的功能。fscanf ()函數(shù)的原型定義為:int fscanf(FILE * fp,char * format,argument1,argument2,argumentm);即:int fsca

31、nf(文件指針,格式字符串,輸入表列);一般(ybn)調(diào)用形式為:fscanf(fp,format,&argument1,&argument2,&argumentm);fscanf ()函數(shù)從文件指針fp指向的文件中,按照f(shuō)ormat規(guī)定的格式,將m(m=1)個(gè)數(shù)據(jù)讀取出來(lái),并分別放入到對(duì)應(yīng)的m個(gè)變量argumentk(1=k=1)個(gè)變量argument1、argument2、argumentm,按照f(shuō)ormat規(guī)定的格式,寫入到文件(wnjin)指針fp指向的文件(wnjin)中。例如:下列程序?qū)⒁粋€(gè)人的信息:字符串變量name的值,整形變量age的值和實(shí)型變量salary的值,分別按%s,

32、%d和%8.2f的格式輸出到fp指向的文件(wnjin)中。char name =”Jack”;int age=26;float salary=3250.00;fprintf(fp,”%s,%d,%8.2f”,name,age,salary)11.3 文件(wnjin)的順序讀寫11.3.3 格式化讀寫函數(shù) 第26頁(yè)/共58頁(yè)第二十六頁(yè),共59頁(yè)。重慶電力高等(godng)??茖W(xué)校11.3 文件(wnjin)的順序讀寫 注意: 用fprintf()函數(shù)和fscanf()函數(shù)對(duì)磁盤進(jìn)行(jnxng)讀寫非常方便,但是,由于在輸入時(shí)要將數(shù)據(jù)的ASC值轉(zhuǎn)換成二進(jìn)制的形式,輸出時(shí)又需要再將二進(jìn)制形式轉(zhuǎn)

33、換成字符形式,這需要花費(fèi)一定的時(shí)間。因此在內(nèi)存與磁盤頻繁交換數(shù)據(jù)的情況下,最好不用fprintf()函數(shù)和fscanf()函數(shù),改用fread()函數(shù)和fwrite()函數(shù)。 用fscanf()函數(shù)從文件中進(jìn)行(jnxng)格式化輸入時(shí),要保證格式字符串所控制的數(shù)據(jù)格式與文件中的數(shù)據(jù)類型保持一致,否則將會(huì)出錯(cuò)。11.3.3 格式化讀寫函數(shù) 第27頁(yè)/共58頁(yè)第二十七頁(yè),共59頁(yè)。重慶電力(dinl)高等專科學(xué)?!纠?1.411.4】 從鍵盤上輸入一個(gè)字符串和一個(gè)十進(jìn)制整數(shù)(zhngsh)(zhngsh),將它們寫入到當(dāng)前目錄下的文本文件中,然后再?gòu)奈谋疚募凶x出并顯示到屏幕上。#include

34、 #include #include #include void main( ) void main( ) char s80; char s80; int a; int a; FILE FILE * *fp; fp; if (fp=fopen(e:File.txt,w) = NULL)if (fp=fopen(e:File.txt,w) = NULL) printf (Cannot open this file!n); printf (Cannot open this file!n);exit(1); exit(1); scanf (%s%d, s,&a); scanf (%s%d, s,&a

35、); fprintf(fp, %s %d, s, a); fprintf(fp, %s %d, s, a);fclose (fp); fclose (fp); if (fp=fopen(e:File.txt, r) = NULL)if (fp=fopen(e:File.txt, r) = NULL)printf (Cannot open file!n); printf (Cannot open file!n); exit(1); exit(1); fscanf (fp, %s%d, s, &a);fscanf (fp, %s%d, s, &a);printf(%s %dn, s, a); pr

36、intf(%s %dn, s, a); fclose(fp); fclose(fp); 11.3 文件(wnjin)的順序讀寫11.3.3 格式化讀寫函數(shù) 第28頁(yè)/共58頁(yè)第二十八頁(yè),共59頁(yè)。重慶(zhn qn)電力高等專科學(xué)校11.3.4 數(shù)據(jù)(shj)塊讀寫函數(shù) 1. 讀取文件中一組數(shù)據(jù)的函數(shù)fread()fread()函數(shù)實(shí)現(xiàn)從文件指針指定的文件中讀取指定長(zhǎng)度數(shù)據(jù)塊的功能。fread()函數(shù)的原型定義為:int fread(char * buffer,int size,int count,FILE * fp);其中參數(shù)buffer為指向?yàn)榇娣抛x入數(shù)據(jù)設(shè)置的緩沖區(qū)的指針或作為(zuwi

37、)緩沖區(qū)的字符數(shù)組;參數(shù)size為讀取的數(shù)據(jù)塊中每個(gè)數(shù)據(jù)項(xiàng)的長(zhǎng)度(單位為字節(jié));參數(shù)count為要讀取的數(shù)據(jù)項(xiàng)的個(gè)數(shù);fp是文件型指針。如果執(zhí)行fread()函數(shù)時(shí)沒(méi)有遇到了文件結(jié)束符,則實(shí)際讀取的數(shù)據(jù)長(zhǎng)度應(yīng)為:sizecount(字節(jié))。fread()函數(shù)在執(zhí)行成功以后,會(huì)將實(shí)際讀取到的數(shù)據(jù)項(xiàng)個(gè)數(shù)作為(zuwi)返回值;如果讀取數(shù)據(jù)失敗或一開(kāi)始讀就遇到了文件結(jié)束符,則返回一個(gè)NULL值。 11.3 文件的順序讀寫第29頁(yè)/共58頁(yè)第二十九頁(yè),共59頁(yè)。重慶(zhn qn)電力高等??茖W(xué)校2. 寫入一組數(shù)據(jù)到文件的函數(shù)fwrite()fwrite()函數(shù)實(shí)現(xiàn)將一個(gè)字符串寫入到指定的文件中去的功

38、能。fputs()函數(shù)的原型定義為:int fwrite(char * buffer,int size,int count,FILE * fp);其中參數(shù)buffer是一個(gè)指針,它指向輸出數(shù)據(jù)緩沖區(qū)的首地址;參數(shù)size為待寫入文件的數(shù)據(jù)塊中每個(gè)數(shù)據(jù)項(xiàng)的長(zhǎng)度(單位為字節(jié));參數(shù)count為待寫入文件的數(shù)據(jù)項(xiàng)的個(gè)數(shù);fp是文件型指針。fwrite()函數(shù)具有整型的返回值,當(dāng)向文件輸出操作成功時(shí),則返回寫入的數(shù)據(jù)塊的個(gè)數(shù),如果輸出失敗,則返回NULL。注意(zh y):利用fread()函數(shù)和fwrite()函數(shù)讀寫二進(jìn)制文件時(shí)非常方便,可以對(duì)任何類型的數(shù)據(jù)進(jìn)行讀寫。當(dāng)fread()和fwrite

39、()調(diào)用成功時(shí),函數(shù)都將返回count的值,即輸入輸出數(shù)據(jù)項(xiàng)的個(gè)數(shù)。11.3 文件(wnjin)的順序讀寫11.3.4 數(shù)據(jù)塊讀寫函數(shù) 第30頁(yè)/共58頁(yè)第三十頁(yè),共59頁(yè)。重慶(zhn qn)電力高等??茖W(xué)校【例11.511.5】 利用鍵盤輸入四個(gè)學(xué)生的基本信息,然后將這些信息保存到當(dāng)前目錄下的磁盤(c pn)(c pn)文件“stu_info.dat”“stu_info.dat”中。#include “stdio.h”#include “stdio.h”#define SIZE 4#define SIZE 4struct student_type /struct student_type

40、/* *將學(xué)生基本信息的數(shù)據(jù)結(jié)構(gòu)定義為一個(gè)結(jié)構(gòu)體* */ / char name 10; char name 10; int num; int num; int age; int age; char addr15; char addr15; studSIZE; / studSIZE; /* *定義學(xué)生基本信息結(jié)構(gòu)體對(duì)象數(shù)組存放四個(gè)學(xué)生的信息* */ /11.3 文件(wnjin)的順序讀寫11.3.4 數(shù)據(jù)塊讀寫函數(shù) 第31頁(yè)/共58頁(yè)第三十一頁(yè),共59頁(yè)。重慶(zhn qn)電力高等??茖W(xué)校void save() FILE *fp;int i;if(fp=fopen(stu_info.dat

41、,wb)=NULL) /*文件打開(kāi)出錯(cuò)*/printf(Cannot open filen); return;for(i=0;iSIZE;i+) /*利用循環(huán)寫入每個(gè)學(xué)生(xu sheng)的信息*/if(fwrite(&studi,sizeof(struct student_type),1,fp)!=1) /*在輸出的同時(shí)檢查輸出是否成功失敗*/printf(file write errorn); /*失敗*/fclose(fp); /*關(guān)閉文件*/11.3 文件(wnjin)的順序讀寫11.3.4 數(shù)據(jù)塊讀寫函數(shù) 第32頁(yè)/共58頁(yè)第三十二頁(yè),共59頁(yè)。重慶電力高等(godng)專科學(xué)校/

42、*主函數(shù),實(shí)現(xiàn)從鍵盤輸入四個(gè)學(xué)生的信息數(shù)據(jù)*/void main()int i;for(i=0;iSIZE;i+) /*/scanf(%s%d%d%s,&,&studi.num,&studi.age,&studi.addr);save(); /*調(diào)用函數(shù)save(),將輸入的數(shù)據(jù)保存到磁盤文件中*/上述(shngsh)程序僅僅實(shí)現(xiàn)了數(shù)據(jù)寫入文件的過(guò)程。下面編寫程序,讀取例11-5生成的數(shù)據(jù)文件中的每位學(xué)生的信息記錄,并顯示到屏幕上。 11.3 文件(wnjin)的順序讀寫11.3.4 數(shù)據(jù)塊讀寫函數(shù) 第33頁(yè)/共58頁(yè)第三十三頁(yè),共59頁(yè)。重慶電力(dinl)高等專科學(xué)?!?/p>

43、例11.611.6】讀取當(dāng)前目錄下的磁盤文件“stu_info.dat”“stu_info.dat”中的學(xué)生信息記錄,并將它們(t men)(t men)顯示到輸出終端上來(lái)。#include stdio.h#include stdio.h#define SIZE 4#define SIZE 4struct student_typestruct student_type char name10;char name10;int num;int num;int age;int age;char addr15;char addr15; studSIZE; studSIZE; 11.3 文件(wnjin

44、)的順序讀寫11.3.4 數(shù)據(jù)塊讀寫函數(shù) 第34頁(yè)/共58頁(yè)第三十四頁(yè),共59頁(yè)。重慶(zhn qn)電力高等??茖W(xué)校/*主函數(shù),實(shí)現(xiàn)從文件中讀取四個(gè)學(xué)生的信息數(shù)據(jù)(shj)并顯示到屏幕上*/void main()int i;FILE *fp;fp=fopen(stu_info.dat ,rb); /*/for(i=0;iSIZE;i+) /*利用循環(huán)讀取每個(gè)學(xué)生的信息*/fread(&studi,sizeof(struct student_type),1,fp); printf(%-10s %4d %4d %-15sn,,studi.num,studi.age,studi

45、.addr); /*輸出*/fclose(fp); /*關(guān)閉文件*/ 11.3 文件(wnjin)的順序讀寫11.3.4 數(shù)據(jù)塊讀寫函數(shù) 第35頁(yè)/共58頁(yè)第三十五頁(yè),共59頁(yè)。重慶電力高等(godng)專科學(xué)校圖圖11-7 例例11-6的運(yùn)行的運(yùn)行(ynxng)結(jié)果結(jié)果不難看出,輸出的內(nèi)容正是例不難看出,輸出的內(nèi)容正是例11-5中寫入文件的內(nèi)容。中寫入文件的內(nèi)容。 11.3 文件(wnjin)的順序讀寫11.3.4 數(shù)據(jù)塊讀寫函數(shù) 第36頁(yè)/共58頁(yè)第三十六頁(yè),共59頁(yè)。重慶電力高等(godng)??茖W(xué)校 前面介紹了對(duì)文件的順序讀寫操作,這些操作都是從文件的第一個(gè)有效數(shù)據(jù)(shj)(shj)

46、(或某個(gè)位置)開(kāi)始的,依照數(shù)據(jù)(shj)(shj)在文件存儲(chǔ)設(shè)備中的先后次序進(jìn)行讀寫,在讀寫過(guò)程中,文件位置指針自動(dòng)移動(dòng)。但在實(shí)際應(yīng)用中,往往需要對(duì)文件中某個(gè)特定位置處的數(shù)據(jù)(shj)(shj)進(jìn)行處理,換言之,就是讀完一個(gè)字節(jié)的內(nèi)容后,并不一定要讀寫其后續(xù)的字節(jié)數(shù)據(jù)(shj)(shj),可能會(huì)強(qiáng)制性地將文件位置指針移動(dòng)到用戶所希望的特定位置,讀取該位置上的數(shù)據(jù)(shj)(shj),這就是隨機(jī)讀寫文件。 C C語(yǔ)言提供了對(duì)文件的隨機(jī)讀寫功能。在隨機(jī)方式下,系統(tǒng)并不按數(shù)據(jù)(shj)(shj)在文件中的物理順序進(jìn)行讀寫,而是可以讀取文件任何有效位置上的數(shù)據(jù)(shj)(shj),也可以將數(shù)據(jù)(shj

47、)(shj)寫入到任意有效的位置。 11.4 11.4 文件(wnjin)(wnjin)的隨機(jī)讀寫 第37頁(yè)/共58頁(yè)第三十七頁(yè),共59頁(yè)。重慶(zhn qn)電力高等專科學(xué)校 C語(yǔ)言通過(guò)提供文件定位函數(shù)來(lái)實(shí)現(xiàn)隨機(jī)讀寫功能(gngnng)。 1. 獲取文件位置指針當(dāng)前值的函數(shù)ftell() ftell()函數(shù)的功能(gngnng)是獲得并返回文件位置指針的當(dāng)前值。ftell()函數(shù)的原型定義為: long ftell(FILE * fp); 其中參數(shù)fp是文件型指針,指向當(dāng)前操作的文件。 ftell ()函數(shù)的返回值為文件位置指針的當(dāng)前位置。如果ftell ()函數(shù)執(zhí)行時(shí)出現(xiàn)錯(cuò)誤,則返回長(zhǎng)整型

48、的-1(即-1L)。11.4 11.4 文件(wnjin)(wnjin)的隨機(jī)讀寫 第38頁(yè)/共58頁(yè)第三十八頁(yè),共59頁(yè)。重慶電力(dinl)高等??茖W(xué)校 2. 重置文件位置指針的函數(shù)rewind()rewind()函數(shù)的功能是使文件的位置指針移到文件的開(kāi)頭處。rewind()函數(shù)的原型定義為: void rewind(FILE * fp); 其中參數(shù)fp是文件型指針,指向當(dāng)前操作(cozu)的文件。 rewind()函數(shù)沒(méi)有返回值,其作用在于:如果要對(duì)文件進(jìn)行多次讀寫操作(cozu),可以在不關(guān)閉文件的情況下,將文件位置指針重新設(shè)置到文件開(kāi)頭,從而能夠重新讀寫此文件。如果沒(méi)有rewind(

49、)函數(shù),每次重新操作(cozu)文件之前,需要將該文件關(guān)閉后再重新打開(kāi),這種方式不僅效率低下,而且操作(cozu)也不方便。使用rewind()函數(shù)便能克服這一缺陷。11.4 11.4 文件(wnjin)(wnjin)的隨機(jī)讀寫 第39頁(yè)/共58頁(yè)第三十九頁(yè),共59頁(yè)。重慶電力(dinl)高等專科學(xué)?!纠?1.711.7】 有一個(gè)文本文件(wnjin)file1.dat(wnjin)file1.dat,兩次讀寫它的內(nèi)容,第一次將它的內(nèi)容顯示在屏幕上,第二次將它的內(nèi)容復(fù)制到另一個(gè)文件(wnjin)fiel2.dat(wnjin)fiel2.dat上。以下為實(shí)現(xiàn)該功能的程序代碼。#include

50、stdio.h#include stdio.hvoid main()void main() FILE FILE * *fp1,fp1,* *fp2;fp2; fp1=fopen(file1.dat,r); fp1=fopen(file1.dat,r); fp2=fopen(fiel2.dat,w); fp2=fopen(fiel2.dat,w); while(!feof(fp1) while(!feof(fp1) putchar(getc(fp1); putchar(getc(fp1); rewind(fp1); rewind(fp1); while(!feof(fp1) while(!feo

51、f(fp1) putc(getc(fp1),fp2); putc(getc(fp1),fp2); fclose(fp1); fclose(fp1); fclose(fp2); fclose(fp2); 11.4 11.4 文件(wnjin)(wnjin)的隨機(jī)讀寫第40頁(yè)/共58頁(yè)第四十頁(yè),共59頁(yè)。重慶(zhn qn)電力高等??茖W(xué)校3. 移動(dòng)文件位置指針的函數(shù)fseek()函數(shù)fseek()可以實(shí)現(xiàn)改變文件位置指針到指定位置的操作。fseek()函數(shù)的原型定義(dngy)為:int fseek(FILE * fp,long offset,int origin);即:int fseek(文件

52、類型指針,位移量,起始點(diǎn));其中fp為打開(kāi)的文件指針,參數(shù)offset為文件位置指針移動(dòng)的位移量(單位為字節(jié)),參數(shù)origin指示出文件位置指針移動(dòng)的起始點(diǎn)(或稱基點(diǎn))位置。當(dāng)執(zhí)行fseek()函數(shù)后,文件位置指針新的位置是以起始點(diǎn)為基準(zhǔn),向后(offset為正值)/或向前(offset為負(fù)值)移動(dòng)offset個(gè)字節(jié)。文件位置指針的新位置可以用公式“origin+offset”來(lái)計(jì)算得出。11.4 11.4 文件(wnjin)(wnjin)的隨機(jī)讀寫第41頁(yè)/共58頁(yè)第四十一頁(yè),共59頁(yè)。重慶電力高等(godng)專科學(xué)校 二進(jìn)制文件的基點(diǎn)origin origin 可以取以下三個(gè)常量值之一

53、: SEEK_SETSEEK_SET(也可直接用數(shù)字0 0表示(biosh)(biosh)):此時(shí)文件位置指針從文件的開(kāi)始位置進(jìn)行移動(dòng); SEEK_CUPSEEK_CUP(對(duì)應(yīng)值為1 1): : 此時(shí)文件位置指針從文件的當(dāng)前位置進(jìn)行移動(dòng); SEEK_ENDSEEK_END(對(duì)應(yīng)值為2 2): : 此時(shí)文件位置指針從文件的結(jié)束位置進(jìn)行移動(dòng)。 文本文件的基點(diǎn)originorigin只能取SEEK_SETSEEK_SET常量值(或取0 0值),而originorigin的值應(yīng)為0 0。 fseek() fseek()函數(shù)常用于二進(jìn)制文件中,對(duì)于文本文件則不常使用,因?yàn)槲谋疚募M(jìn)行字符的轉(zhuǎn)換,這會(huì)為

54、文件位置指針的計(jì)算帶來(lái)混亂。fseek()fseek()函數(shù)的調(diào)用形式為:fseek()fseek()函數(shù)返回一個(gè)整形值。如果函數(shù)執(zhí)行成功,返回0 0值;否則,返回一個(gè)非0 0值。 下面給出fseek()fseek()函數(shù)調(diào)用的兩個(gè)例子: fseek(fp,50L,1)fseek(fp,50L,1),將fpfp指向的文件的位置指針向后移動(dòng)到離當(dāng)前位置5050個(gè)字節(jié)處; fseek(fp,-100L,2)fseek(fp,-100L,2),將fpfp指向的文件的位置指針從文件末尾處向前回退100100個(gè)字節(jié)。 11.4 11.4 文件(wnjin)(wnjin)的隨機(jī)讀寫第42頁(yè)/共58頁(yè)第四十

55、二頁(yè),共59頁(yè)。重慶(zhn qn)電力高等??茖W(xué)校【例11.811.8】 在當(dāng)前目錄下有一二進(jìn)制文件(wnjin)information.dat(wnjin)information.dat,文件(wnjin)(wnjin)中存儲(chǔ)有學(xué)生信息數(shù)據(jù)。編程實(shí)現(xiàn)按指定位置讀取該文件(wnjin)(wnjin)中的數(shù)據(jù),顯示到屏幕上,并統(tǒng)計(jì)文件(wnjin)(wnjin)的總字節(jié)數(shù)目,也顯示到屏幕上。以下為實(shí)現(xiàn)該功能的程序代碼。 #include stdio.h #include stdio.hstruct student char name20;int num; ;struct student cha

56、r name20;int num; ;/ /* *主函數(shù)* */ /main()main() int i=0;int i=0;long n=0;long n=0;FILE FILE * *fp=NULL;fp=NULL;struct student a = 0;struct student a = 0;fp = fopen(information.dat,rb);fp = fopen(information.dat,rb);if(fp=NULL)if(fp=NULL) printf(Cant open!n); printf(Cant open!n);exit(0); exit(0); prin

57、tf(Record in file information.dat:n);printf(Record in file information.dat:n);11.4 11.4 文件(wnjin)(wnjin)的隨機(jī)讀寫第43頁(yè)/共58頁(yè)第四十三頁(yè),共59頁(yè)。重慶電力高等(godng)專科學(xué)校for(i=1;i5;i+=2) fseek(fp,i*sizeof(struct student),SEEK_SET); /*定位(dngwi)文件位置指針*/ n=ftell(fp); /*獲取文件位置指針當(dāng)前值*/ fread(&a,sizeof(struct student),1,fp); /*讀取

58、數(shù)據(jù)塊*/ printf(“current:%ldth byte,%dth record:%s %dn”,n,i+1,,a.num); fseek(fp,-3l*sizeof(struct student),2); /*重新定位(dngwi)文件位置指針*/ n=ftell(fp); /*重新讀取數(shù)據(jù)塊*/ fread(&a,sizeof(struct student),1,fp); printf(“current:%ldth btype,record is:%s %dn”,n,,a.num); rewind(fp); /*重置文件位置指針到文件開(kāi)始*/ n=ftell

59、(fp); /*獲取文件位置指針當(dāng)前值*/ fread(&a,sizeof(struct student),1,fp); printf(“current:%ldth btype,frist record :%s %dn”,n,,a.num); fseek(fp,-0l*sizeof(struct student),2); /*重新定位(dngwi)文件位置指針到文件尾部*/ n=ftell(fp); /*計(jì)算文件總字節(jié)數(shù)目*/ printf(“total bytes:%ldn”,n); /*顯示文件總字節(jié)數(shù)目*/ fclose(fp); getch(); 11.4 11.4 文件(

60、wnjin)(wnjin)的隨機(jī)讀寫第44頁(yè)/共58頁(yè)第四十四頁(yè),共59頁(yè)。重慶電力(dinl)高等??茖W(xué)校【例11.811.8】 在當(dāng)前目錄下有一二進(jìn)制文件information.datinformation.dat,文件中存儲(chǔ)有學(xué)生信息數(shù)據(jù)。編程實(shí)現(xiàn)按指定(zhdng)(zhdng)位置讀取該文件中的數(shù)據(jù),顯示到屏幕上,并統(tǒng)計(jì)文件的總字節(jié)數(shù)目,也顯示到屏幕上。以下為實(shí)現(xiàn)該功能的程序代碼。 #include stdio.h #include stdio.hstruct student struct student char name20;int num;char name20;int num

溫馨提示

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

評(píng)論

0/150

提交評(píng)論