![第12章讀寫文件_第1頁](http://file4.renrendoc.com/view/36c99e4e917c4c4338eeceb43f778aa6/36c99e4e917c4c4338eeceb43f778aa61.gif)
![第12章讀寫文件_第2頁](http://file4.renrendoc.com/view/36c99e4e917c4c4338eeceb43f778aa6/36c99e4e917c4c4338eeceb43f778aa62.gif)
![第12章讀寫文件_第3頁](http://file4.renrendoc.com/view/36c99e4e917c4c4338eeceb43f778aa6/36c99e4e917c4c4338eeceb43f778aa63.gif)
![第12章讀寫文件_第4頁](http://file4.renrendoc.com/view/36c99e4e917c4c4338eeceb43f778aa6/36c99e4e917c4c4338eeceb43f778aa64.gif)
![第12章讀寫文件_第5頁](http://file4.renrendoc.com/view/36c99e4e917c4c4338eeceb43f778aa6/36c99e4e917c4c4338eeceb43f778aa65.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2023/2/11第13章讀寫文件主要內(nèi)容文件相關(guān)概念讀取文本文件
寫文本文件讀寫二進(jìn)制文件隨機(jī)讀寫文件2023/2/12什么是文件?文件相關(guān)概念2023/2/13文件即是存儲(chǔ)在外部介質(zhì)(例如硬盤)中的數(shù)據(jù)的集合。每一個(gè)文件都有文件名(主干),文件存儲(chǔ)位置以及文件的類型(擴(kuò)展名)等信息。例如:G:\tzhg\temp.txt表示temp.txt這個(gè)文件存儲(chǔ)在G盤下tzhg這個(gè)文件夾中,它是一個(gè)txt文件,即是一個(gè)記事本文件。文件相關(guān)概念2023/2/14文件分為文本文件和二進(jìn)制文件。文本文件中的數(shù)據(jù)都被當(dāng)作字符來對(duì)待,二進(jìn)制文件中的數(shù)據(jù)會(huì)被當(dāng)作。例如有一個(gè)整數(shù):123如果將其當(dāng)作文本文件來對(duì)待,則會(huì)被當(dāng)作字符’1’,’2’,‘3’來處理,存儲(chǔ)時(shí),會(huì)將這些字符對(duì)應(yīng)的ASCII碼存儲(chǔ)到磁盤中,磁盤中存儲(chǔ)的信息為:如果將其當(dāng)作二進(jìn)制文件來處理,則會(huì)將整數(shù)123轉(zhuǎn)化為二進(jìn)制數(shù)01111011存儲(chǔ)到磁盤中。簡(jiǎn)單地說,數(shù)據(jù)在內(nèi)存中是什么形式,在磁盤中就是什么形式。001100010011001000110011文件相關(guān)概念2023/2/15
為什么要讀寫文件?文件相關(guān)概念2023/2/16程序運(yùn)行期間,可能需要從文件中獲取數(shù)據(jù),這時(shí)需要對(duì)文件進(jìn)行讀操作,簡(jiǎn)稱讀文件
程序運(yùn)行后的結(jié)果有時(shí)候需要永久保存起來,這時(shí)就需要將這些結(jié)果數(shù)據(jù)寫(保存)到文件中,簡(jiǎn)稱寫文件。文件相關(guān)概念2023/2/17第13章讀寫文件文件相關(guān)概念
讀取文本文件
寫文本文件讀寫二進(jìn)制文件隨機(jī)讀寫文件2023/2/18
按文本讀取文件的步驟(1)聲明FILE指針變量(FILE是stdio.h中聲明的結(jié)構(gòu)體類型)FILE*fp;(2)打開文件
使用庫函數(shù)fopen打開文件,fopen函數(shù)的返回值為文件的地址,即文件中第一個(gè)字節(jié)的地址號(hào),將其賦給指針變量fpfp=fopen(文件名字,打開方式);fopen函數(shù)的第一個(gè)參數(shù)是一個(gè)字符串,可以為文件的名字,或者為文件的絕對(duì)路徑,例如:第一個(gè)參數(shù)取值:“hello.txt”或者:“G:\\tzhg\\temp.txt”
當(dāng)取值是文件名字時(shí),要求該文件和當(dāng)前C程序(可執(zhí)行文件)在同一目錄中101fp指向文件外部存儲(chǔ)器101文件讀取文本文件2023/2/19fopen函數(shù)的第二個(gè)參數(shù)也是一個(gè)字符串,用于決定打開文件的方式,即以文本方式還是以二進(jìn)制方式打開文件。
如第二個(gè)參數(shù)的值為”r”,則表示以文本方式打開文件如第二個(gè)參數(shù)的值為”rb”,則表示以二進(jìn)制方式打開文件(3)確定按文本讀取文件在步驟(2)中,讓fopen函數(shù)的第二個(gè)參數(shù)取值為如下之一:
“r”:以只讀方式打開文件,即按文本方式打開一個(gè)文件,程序?qū)次谋痉绞阶x取該文件,如果文件不存在,fopen返回NULL。
“r+”:打開方式為讀/寫方式。例如:fp=fopen(“G:\\tzhg\\temp.txt”,“r”)使用fgetc()函數(shù)或fgets()函數(shù)讀取文件charfgetc(FILE*fp);該函數(shù)從文件中讀取一個(gè)字符,函數(shù)的參數(shù)fp表示與某一個(gè)文件相關(guān)聯(lián)的指針,fgetc函數(shù)即從參數(shù)fp所關(guān)聯(lián)的那個(gè)文件讀取數(shù)據(jù)。每調(diào)用一次fgetc函數(shù),就從相關(guān)聯(lián)的文件按順序讀取一個(gè)字符,該函數(shù)的返回值表示讀取到的這個(gè)字符。例如,假設(shè)某個(gè)文本文件中的內(nèi)容為abc,那么第一次調(diào)用fgetc函數(shù)讀出的字符為’a’,第二次調(diào)用fgetc函數(shù)讀出的字符為’b’,第三次調(diào)用fgetc函數(shù)讀出的字符為’c’。由于文件只有三個(gè)字符,第三次調(diào)用fgetc函數(shù)時(shí)就讀到了文件的最后一個(gè)字符,如果再調(diào)用fgetc函數(shù)進(jìn)行第四次讀取,fgetc函數(shù)的返回值將是EOF(EOF是在stdio.h中定義的符號(hào)常量,值為-1,是endoffile的首字母縮寫,表示文件的末尾)。程序可以通過fgetc函數(shù)的返回值是否等于EOF來判斷是否已經(jīng)讀完了文件中的所有內(nèi)容。讀取文本文件2023/2/110char*fgets(charstr[],intn,FILE*p)fegts函數(shù)從參數(shù)p所指向的文件一次讀取n-1個(gè)字符,并將讀取到的這n-1個(gè)字符存放到第一個(gè)參數(shù)所指定的字符數(shù)組str中,并在字符數(shù)組str的末尾添加一個(gè)空字符’\0’。每調(diào)用一次fegts函數(shù)就從p所指向的文件中讀取n-1個(gè)字符,直到讀到文件的末尾。最后一次讀取到的字符可能不足n-1個(gè)。如果沒有讀到文件的末尾,fgets的返回值是字符數(shù)組str的首地址,如果讀到文件的末尾,fgets的返回值是NULL,程序可以通過返回值是否為NULL來判斷文件是否讀完。(5)關(guān)閉文件
調(diào)用函數(shù)fclose關(guān)閉第二步打開的文件:fclose(fp);讀取文本文件2023/2/111讀取文本文件的步驟可以進(jìn)一步簡(jiǎn)化為以下三步:1)FILE*fp=fopen(要打開的文件,打開方式);2)使用fgetc函數(shù)或者fgets函數(shù)讀取文件中的數(shù)據(jù)
3)讀取完畢后用庫函數(shù)fclose關(guān)閉文件讀取文本文件2023/2/112【例12-1】使用fgetc函數(shù)讀取文件中的內(nèi)容(chp12_1.c)#include<stdio.h>intmain(){//第一步,打開文件,并讓文件指針fp指向打開的文件FILE*fp=fopen("E:\\file\\hello.txt","r");//第二步,使用fgetc函數(shù)從文件中讀取數(shù)據(jù)charch;if(fp!=NULL){ch=fgetc(fp);while(ch!=EOF){printf("%c",ch);ch=fgetc(fp);}//第三步,關(guān)閉文件fclose(fp);}return0;}讀取文本文件2023/2/113【例12-2】使用fgets函數(shù)讀取文件中的內(nèi)容(chp12_2.c)#include<stdio.h>intmain(){//第一步,打開文件,并讓文件指針fp指向打開的文件FILE*fp=fopen("E:\\file\\hello.txt","r");//第二步,使用fgets函數(shù)從文件中讀取數(shù)據(jù)charstr[6];char*result;if(fp!=NULL){result=fgets(str,6,fp);while(result!=NULL){printf("%s",str);result=fgets(str,6,fp);}}//第三步,關(guān)閉文件fclose(fp);return0;}讀取文本文件2023/2/114第13章讀寫文件文件相關(guān)概念讀取文本文件
寫文本文件讀寫二進(jìn)制文件隨機(jī)讀寫文件2023/2/115程序中的數(shù)據(jù)一般都存儲(chǔ)在內(nèi)存中,當(dāng)程序運(yùn)行結(jié)束或者關(guān)閉計(jì)算機(jī),內(nèi)存中的數(shù)據(jù)將丟失。當(dāng)需要將程序中的數(shù)據(jù)永久地保存起來時(shí),就需要將這些數(shù)據(jù)寫入到磁盤文件中。程序中的數(shù)據(jù)可以被當(dāng)作兩種類型來對(duì)待,即文本類型和二進(jìn)制類型。例如,對(duì)于0來說,可以把它當(dāng)作數(shù)字0來對(duì)待,也可以把它當(dāng)作字符“0”來對(duì)待。如果將其當(dāng)作字符“0”來對(duì)待,寫入到文件中的數(shù)據(jù)是字符“0”的ASCII值48,即二進(jìn)制數(shù)00110000。寫文本文件2023/2/116寫文本文件步驟:第一步:以寫入的方式打開文件。即:FILE*fp=fopen(要打開的文件,打開方式);打開方式的取值有以下幾種:“w”:以寫入的方式打開一個(gè)文本文件,如文件不存在,則建立該文件。如文件已經(jīng)存在,當(dāng)向該文件寫入新的數(shù)據(jù)時(shí),該文件原來的數(shù)據(jù)將被清除掉。“a”:在文本文件的末尾添加數(shù)據(jù)(a表示append),如文件不存在,則建立新文件。如文件已經(jīng)存在,當(dāng)向該文件寫入新的數(shù)據(jù)時(shí),新的數(shù)據(jù)會(huì)附加在文件原來數(shù)據(jù)的末尾?!皉+”:以讀取和寫入的方式打開文件,可以從文件讀取數(shù)據(jù),也可以往文件寫入數(shù)據(jù),但這種方式要求打開的文件已經(jīng)存在?!皐+”:以寫入和讀取的方式打開文件,可以從文件讀取數(shù)據(jù),也可以往文件寫入數(shù)據(jù)。這種方式會(huì)新建一個(gè)文件(不管原來文件存在不存在)。所以,以這種方式打開文件時(shí),應(yīng)該先寫入數(shù)據(jù)到文件中,然后再從文件中讀取數(shù)據(jù)?!癮+”:可以從文件讀取數(shù)據(jù),也可以往文件寫入數(shù)據(jù)。寫入數(shù)據(jù)時(shí),新寫入的數(shù)據(jù)會(huì)附加在原來數(shù)據(jù)的末尾。寫文本文件2023/2/117第二步,使用庫函數(shù)fputc或fputs將數(shù)據(jù)寫入到文件中。fputc函數(shù)的原型如下:intfputc(intch,FILE*fp);該函數(shù)將ch這個(gè)字符寫入到fp所關(guān)聯(lián)的那個(gè)文件中去,寫入時(shí),會(huì)將ch添加到文件的末尾。如果寫入成功,fputc函數(shù)的返回值就是寫入的字符ch。如果不成功,返回值就是EOF(即-1)。fputs函數(shù)的原型:charfputs(charstr[],FILE*fp);fputs函數(shù)將字符數(shù)組str中的內(nèi)容寫入到fp所指向的文件中去。寫入時(shí),會(huì)將str數(shù)組中的內(nèi)容添加在文件原來數(shù)據(jù)的末尾。如果寫入成功,函數(shù)返回寫入字符數(shù)組str的首字符;如果寫入失敗,返回EOF。第三步,數(shù)據(jù)寫入完畢后,使用庫函數(shù)fclsoe關(guān)閉文件。寫文本文件2023/2/118【例12-3】使用fputc函數(shù)將數(shù)據(jù)寫入文件中(chp12_3.c)#include<stdio.h>#include<string.h>intmain(){//第一步,打開文件,并讓文件指針fp指向打開的文件FILE*fp=fopen("E:\\file\\test.txt","w");//第二步,使用fputc函數(shù)將數(shù)據(jù)寫入到文件中。charstrs[3][20]={{"abc"},{"123"},{"ABC"}};inti;if(fp!=NULL){for(i=0;i<3;i++){intj;for(j=0;j<strlen(strs[i]);j++){fputc(strs[i][j],fp);//往fp指向的文件寫入字符strs[i][j]}}//第三步,關(guān)閉文件fclose(fp);}return0;}寫文本文件2023/2/119【例12-4】使用fputs函數(shù)將數(shù)據(jù)寫入文件中(chp12_4.c)#include<stdio.h>#include<string.h>intmain(){//第一步,打開文件,并讓文件指針fp指向打開的文件FILE*fp=fopen("E:\\file\\test2.txt","w");//第二步,使用fputs函數(shù)將數(shù)據(jù)寫入到文件中。charstrs[3][20]={{"abc"},{"123"},{"ABC"}};inti;if(fp!=NULL){for(i=0;i<3;i++){fputs(strs[i],fp);//將字符數(shù)組strs[i]寫入到文件指針fp所關(guān)聯(lián)的文件中。}//第三步,關(guān)閉文件fclose(fp);}return0;}寫文本文件2023/2/120第13章讀寫文件文件相關(guān)概念讀取文本文件
寫文本文件
讀寫二進(jìn)制文件隨機(jī)讀寫文件2023/2/121程序中的數(shù)據(jù)可以當(dāng)作文本型數(shù)據(jù)來對(duì)待,也可以當(dāng)作二進(jìn)制數(shù)據(jù)來對(duì)待。例如,對(duì)于68,如果將其當(dāng)作文本數(shù)據(jù)來對(duì)待,則表示字符’6’和字符’8’,可以將其寫入到文本文件中以便永久保存。寫入到文本文件的內(nèi)容是字符’6’的ASCII值54(對(duì)應(yīng)的二進(jìn)制數(shù)為00110110)和字符’8’的ASCII值56(對(duì)應(yīng)的二進(jìn)制數(shù)為00111000),各占一個(gè)字節(jié),一共兩字節(jié);如果將其當(dāng)作二進(jìn)制數(shù)據(jù)來對(duì)待,則其表示的二進(jìn)制數(shù)為01000100,可以將其寫入到二進(jìn)制文件中,寫入的值為01000100,占一個(gè)字節(jié)。讀寫二進(jìn)制文件的步驟與讀寫文本文件的步驟類似讀寫二進(jìn)制文件2023/2/122讀寫步驟第一步:使用庫函數(shù)fopen以二進(jìn)制的方式打開文件,例如FILE*fp=fopen(要打開的文件,打開方式);打開方式的取值有以下幾種:“rb”:以二進(jìn)制只讀方式打開文件,程序?qū)⒆x取到的數(shù)據(jù)當(dāng)作二進(jìn)制數(shù)據(jù)進(jìn)行處理,如果該文件不存在,fopen函數(shù)返回NULL?!皐b”:以二進(jìn)制只寫的方式打開文件,程序?qū)?shù)據(jù)以二進(jìn)制的方式寫入文件。如果該文件已經(jīng)存在,則寫入數(shù)據(jù)時(shí),文件原來的內(nèi)容先被清除,然后再寫入。如果文件不存在,則建立一個(gè)新文件,然后再寫入數(shù)據(jù)?!癮b”:以二進(jìn)制尾加的方式打開文件。寫入數(shù)據(jù)時(shí),新寫入的數(shù)據(jù)添加在原來文件內(nèi)容的后面。如果該文件不存在,fopen函數(shù)返回NULL?!皉b+”:以二進(jìn)制讀寫的方式打開文件。如果該文件不存在,fopen函數(shù)返回NULL?!皐b+”:以二進(jìn)制讀寫的方式打開文件。如果該文件存在,寫入時(shí),該文件原來的內(nèi)容將先被清除掉,然后再寫入。如果該文件不存在,則新建一個(gè)文件。這種方式只允許先往文件寫入數(shù)據(jù),然后再讀取?!癮b+”:以二進(jìn)制讀寫的方式打開文件。如果該文件不存在,fopen函數(shù)返回NULL。寫入數(shù)據(jù)時(shí),新寫入的數(shù)據(jù)存放在文件原來數(shù)據(jù)的后面。這種方式也允許從文件讀取數(shù)據(jù)。寫文本文件2023/2/123第二步:使用庫函數(shù)從二進(jìn)制文件中讀寫數(shù)據(jù)(使用fread函數(shù)從二進(jìn)制文件中讀取數(shù)據(jù),使用fwrite函數(shù)往二進(jìn)制文件中寫入數(shù)據(jù))。fwrite函數(shù)的原型:intfwrite(void*buf,intsize,intcount,FILE*fp);該函數(shù)接收4個(gè)參數(shù),參數(shù)的意義如下:fp:將數(shù)據(jù)寫入fp所指向的文件。buf:存放寫入的數(shù)據(jù),以buf作為起始地址的內(nèi)存中的一段數(shù)據(jù)將寫入到文件中。size:寫入到文件中的一個(gè)數(shù)據(jù)所占的字節(jié)數(shù)。count:寫入到文件中的數(shù)據(jù)的個(gè)數(shù)。fwrite函數(shù)返回成功寫入的數(shù)據(jù)的個(gè)數(shù)(成功寫入的數(shù)據(jù)個(gè)數(shù)可能小于count)。fread函數(shù)的原型:intfread(void*buf,intsize,intcount,FILE*fp);該函數(shù)接收4個(gè)參數(shù),參數(shù)的意義如下:fp:從fp所指向的文件中讀取數(shù)據(jù)。buf:存放讀取到的數(shù)據(jù),以buf作為起始地址的內(nèi)存區(qū)域?qū)⒋娣艔奈募凶x取到的數(shù)據(jù)。size:讀取的每個(gè)數(shù)據(jù)所占的字節(jié)數(shù)count:讀取數(shù)據(jù)的個(gè)數(shù)。fread函數(shù)返回成功讀取到的數(shù)據(jù)的個(gè)數(shù)(成功讀取的數(shù)據(jù)個(gè)數(shù)可能小于count)。第三步,讀取或?qū)懭胪戤吅?,關(guān)閉文件。讀寫二進(jìn)制文件2023/2/124【例12-5】使用fwrite函數(shù)將數(shù)據(jù)寫入到二進(jìn)制文件中(chp12_5.c)#include<stdio.h>intmain(){inta=10;intarray[3]={66,77,88};intsize=sizeof(int);//第一步,打開文件,并讓文件指針fp指向打開的文件FILE*fp=fopen("E:\\file\\data.dat","wb");//第二步,使用fwrite函數(shù)將數(shù)據(jù)寫入到文件中。if(fp!=NULL){fwrite(&a,size,1,fp);//將以變量a的地址開始的內(nèi)存區(qū)域的的一個(gè)數(shù)據(jù)寫到fp所指//向的文件中,每個(gè)數(shù)據(jù)占size個(gè)字節(jié)fwrite(array,size,3,fp);//將以數(shù)組array開始的內(nèi)存區(qū)域的三個(gè)數(shù)據(jù)寫到fp所指向的//文件中,每個(gè)數(shù)據(jù)占size個(gè)字節(jié)//第三步,關(guān)閉文件。fclose(fp);}return0;}讀寫二進(jìn)制文件2023/2/125【例12-6】使用fread函數(shù)從二進(jìn)制文件中讀取數(shù)據(jù)(chp12_6.c)#include<stdio.h>intmain(){inta;intarray[3];intsize=sizeof(int);inti;//第一步,打開文件,并讓文件指針fp指向打開的文件FILE*fp=fopen("E:\\file\\data.dat","rb");if(fp!=NULL){//第二步,使用fread函數(shù)將文件中的數(shù)據(jù)讀到內(nèi)存中fread(&a,size,1,fp);fread(array,size,3,fp);printf("a=%d\n",a);for(i=0;i<3;i++){printf("array[%d]=%d\t",i,array[i]);}//第三步,關(guān)閉文件fclose(fp);}return0;}讀寫二進(jìn)制文件2023/2/126【例12-7】使用fread函數(shù)和fwrite函數(shù)讀寫二進(jìn)制數(shù)據(jù)(chp12_7.c)#include<stdio.h>typedefstruct{charname[20];intage;}Student;intmain(){Studentstus[3]={{"zhangsan",18},{"lisi",19},{"wangwu",20}};Studentstu;intsize=sizeof(Student);inti;FILE*fp=fopen("E:\\file\\student.dat","wb");if(fp!=NULL){intcount=fwrite(stus,size,3,fp);if(count==3){printf("成功寫入3個(gè)數(shù)據(jù)!\n");}fclose(fp);}fp=fopen("E:\\file\\student.dat","rb");if(fp!=NULL){for(i=0;i<3;i++){intcount=fread(&stu,size,1,fp);if(count==1){printf("name:%s\tage:%d\n",,stu.age);}}fclose(fp);}return0;}讀寫二進(jìn)制文件2023/2/127第13章讀寫文件文件相關(guān)概念讀取文本文件
寫文本文件讀寫二進(jìn)制文件
隨機(jī)讀寫文件2023/2/12813.4隨機(jī)讀寫前面學(xué)習(xí)的文件讀寫函數(shù)fgetc,fgets,fputc,fputs,fwrite,fread都有一個(gè)共同的特點(diǎn),那就是對(duì)文件進(jìn)行順序讀寫。順序讀的意思是,必須從文件的開始處讀數(shù)據(jù),例如,要讀取文本文件的第三個(gè)字符數(shù)據(jù),必須先將前面兩個(gè)字符讀出來,才能讀到第三個(gè)字符。順序?qū)懙囊馑际?,必須往文件的開始處或結(jié)尾處寫入數(shù)據(jù)(以”a”作為打開方式),而不能往文件中的某個(gè)特定位置上寫入新的數(shù)據(jù)。這種順序讀寫文件的方式有時(shí)候會(huì)非常的不方便,而且效率比較低。而這小節(jié)學(xué)習(xí)的隨機(jī)讀寫函數(shù)將可以做到這些,從而提高文件讀寫的效率。之前學(xué)習(xí)fgetc函數(shù)的時(shí)候,我們知道,第一次調(diào)用fgetc函數(shù)讀到的是文件的第一個(gè)字符,第二次調(diào)用fgetc函數(shù)讀到的是文件的第二個(gè)字符…,為什么第二次調(diào)用fgetc函數(shù)讀到的是文件的第二個(gè)字符,而不是第一個(gè)字符呢?系統(tǒng)是如何判斷的呢?這就涉及到一個(gè)文件讀寫標(biāo)記的概念,每一個(gè)文件都有一個(gè)文件讀寫標(biāo)記。一般情況下,當(dāng)打開文件的時(shí)候,文件讀寫標(biāo)記指向文件開頭,當(dāng)?shù)谝淮问褂胒getc函數(shù)從文件讀數(shù)據(jù)時(shí),就將文件讀寫標(biāo)記所指向的位置上的那個(gè)字符讀取出來,接著文件讀寫標(biāo)記向后移動(dòng)一個(gè)位置,這時(shí)第二次調(diào)用fgetc函數(shù)讀到的就是文件的第二個(gè)字符,依次類推,直到文件末尾。對(duì)于往文件中寫入數(shù)據(jù)也是一樣的道理。2023/2/129為了方便對(duì)文件進(jìn)行操作,可以使用庫函數(shù)改變文件讀寫標(biāo)記的位置,從而達(dá)到對(duì)文件進(jìn)行隨機(jī)讀寫的目的。rewind函數(shù)voidrewind(FILE*p)rewind函數(shù)能使讀寫標(biāo)記回到文件的開頭處ftell函數(shù)longftell(FILE*p)ftell函數(shù)可以返回一個(gè)long型數(shù)值,該值是從文件開頭到當(dāng)前讀寫標(biāo)記的全部字節(jié)個(gè)數(shù),當(dāng)ftell函數(shù)的返回值等于文件的長(zhǎng)度時(shí),表示讀寫位置處于文件的末尾。2023/2/1303.fseek函數(shù)intfseek(FILE*fp,longoffset,intorigin)fseek函數(shù)能隨機(jī)移動(dòng)讀寫位置,參數(shù)意義如下:
origin:表示移動(dòng)的起始點(diǎn),取值范圍為:0、1、2。取值為0表示文件開始位置,取值為1表示當(dāng)前位置,取值為2表示文件結(jié)尾位置。為了方便記憶,C標(biāo)準(zhǔn)在stdio.h中給這些值定義了符號(hào)常量:#defineSEEK_SET0#defineSEEK_CUR1#defineSEEK_END2offset:表示移動(dòng)的位移量,以origin所指定的位置作為移動(dòng)起始點(diǎn)。例如:fseek(fp,6,SEEK_SET);的意思是,將移動(dòng)起始點(diǎn)定位在文件的開始處,然后將文件讀寫位置移動(dòng)到距離文件開頭6個(gè)字節(jié)處。再如:fseek(fp,-8,SEEK_END);的意思是,將移動(dòng)起始點(diǎn)定位在文件的結(jié)尾處,然后將文件讀寫位置往前(往文件開始的方向)移動(dòng)8個(gè)字節(jié)。2023/2/131【例12-8】使用fseek函數(shù)對(duì)文件進(jìn)行隨機(jī)讀寫#include<stdio.h>intmain(){FILE*fp=fopen("a.txt","w+");charstr[10]="abc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘇州蘇教版三年級(jí)數(shù)學(xué)上冊(cè)第一單元《兩、三位數(shù)乘一位數(shù)》聽評(píng)課記錄
- 七年級(jí)數(shù)學(xué)上冊(cè)第5章一元一次方程5.4一元一次方程的應(yīng)用第4課時(shí)利率等其他問題聽評(píng)課記錄(新版浙教版)
- 人教版數(shù)學(xué)七年級(jí)下冊(cè)5.1.2《垂線》聽評(píng)課記錄2
- 統(tǒng)編版初中語文七年級(jí)下冊(cè)第四課《孫權(quán)勸學(xué)》聽評(píng)課記錄
- 新版湘教版秋八年級(jí)數(shù)學(xué)上冊(cè)第四章一元一次不等式組課題不等式聽評(píng)課記錄
- 聽評(píng)四年級(jí)音樂課記錄
- 聽評(píng)課記錄七年級(jí)歷史
- 七年級(jí)數(shù)學(xué)上冊(cè)第11課時(shí)有理數(shù)的乘法運(yùn)算律聽評(píng)課記錄新湘教版
- 人教版七年級(jí)數(shù)學(xué)上冊(cè):1.4.2 《有理數(shù)的除法》聽評(píng)課記錄
- 粵人版地理七年級(jí)下冊(cè)《第三節(jié) 巴西》聽課評(píng)課記錄2
- GB/T 32691-2016汽車空調(diào)電磁離合器
- 第八章 客戶關(guān)系管理
- 新版人教版高中英語選修一、選修二詞匯表
- 2022年河北邯鄲世紀(jì)建設(shè)投資集團(tuán)有限公司招聘筆試試題及答案解析
- 萬物有靈且美(讀書心得)課件
- 住院患者跌倒墜床質(zhì)量控制管理考核標(biāo)準(zhǔn)
- 人民醫(yī)院醫(yī)共體財(cái)務(wù)管理部工作手冊(cè)
- 戰(zhàn)略規(guī)劃培訓(xùn)luqiang課件
- 高三日語一輪復(fù)習(xí)之自謙語句型課件
- YYT 0325-2022 一次性使用無菌導(dǎo)尿管
- 收取執(zhí)行款銀行賬戶確認(rèn)書
評(píng)論
0/150
提交評(píng)論