版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
9.1文件概述9.1.1文件的概念9.1.2文件的分類9.1.3文件的一般操作過(guò)程9.1.4文件的指針第1頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第1頁(yè)。9.1.1文件的概念文件是計(jì)算機(jī)中的一個(gè)重要概念,通常是指存儲(chǔ)在外部介質(zhì)上的信息的集合。存儲(chǔ)程序代碼的文件稱為程序文件,存儲(chǔ)數(shù)據(jù)的文件稱為數(shù)據(jù)文件。另外,C語(yǔ)言把輸入輸出設(shè)備也視為一類特殊的文件。計(jì)算機(jī)對(duì)文件的操作總體上分成輸入和輸出兩大類,對(duì)文件的輸人輸出(I/0)過(guò)程是通過(guò)操作系統(tǒng)進(jìn)行管理的。C語(yǔ)言程序?qū)ξ募奶幚硎峭ㄟ^(guò)標(biāo)準(zhǔn)函數(shù)庫(kù)中的文件操作函數(shù)實(shí)現(xiàn)的,使用這些函數(shù),可以簡(jiǎn)單、高效、安全地訪問(wèn)外部數(shù)據(jù)。第2頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第2頁(yè)。9.1.1文件的概念1.設(shè)備文件在C語(yǔ)言中,所有的外部設(shè)備均被作為文件對(duì)待,這種文件稱為設(shè)備文件。對(duì)外部設(shè)備的輸人輸出處理就是讀寫(xiě)設(shè)備文件的過(guò)程。
2.文件緩沖區(qū)在程序的運(yùn)行過(guò)程中,程序要將保存在內(nèi)存中的數(shù)據(jù)寫(xiě)入磁盤(pán),首先要建立一個(gè)“輸出文件緩沖區(qū)”,這個(gè)緩沖區(qū)是一個(gè)連接計(jì)算機(jī)內(nèi)存數(shù)據(jù)與外存文件的橋梁,當(dāng)向文件輸出數(shù)據(jù)時(shí),準(zhǔn)備輸出的數(shù)據(jù)先寫(xiě)入文件緩沖區(qū),等文件緩沖區(qū)填滿后再輸出到文件中。這一過(guò)程稱為“寫(xiě)文件”,是數(shù)據(jù)輸出過(guò)程。與“寫(xiě)文件”過(guò)程相對(duì)的是要將保存在文件中的數(shù)據(jù)裝入內(nèi)存。首先要建立一個(gè)“輸入文件緩沖區(qū)”,當(dāng)從文件中輸入數(shù)據(jù)時(shí),也是把讀入的數(shù)據(jù)先寫(xiě)入文件緩沖區(qū),等文件緩沖區(qū)數(shù)據(jù)裝滿之后再整個(gè)送給程序。這一過(guò)程稱為“讀文件”,是數(shù)據(jù)輸入過(guò)程。第3頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第3頁(yè)。9.1.1文件的概念使用緩沖區(qū)的文件讀、寫(xiě)示意圖
第4頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第4頁(yè)。9.1.2文件的分類以ASCII碼字符形式存儲(chǔ)的文件稱為文本文件,又叫ASCII文件。例如用高級(jí)程序語(yǔ)言編寫(xiě)的程序文件是文本文件,用Windows“記事本”程序創(chuàng)建的文件也是文本文件。文本文件是一種字符流文件,文本文件的一個(gè)字符就是一個(gè)字節(jié),因而方便了字符的處理,不過(guò)文本文件一般要占用較大的存儲(chǔ)空間。二進(jìn)制文件是按照數(shù)據(jù)在內(nèi)存中的字節(jié)序列形成的字節(jié)流文件。例如C程序的目標(biāo)文件(擴(kuò)展名為obj)和可執(zhí)行文件(擴(kuò)展名為exe)都是二進(jìn)制文件。在二進(jìn)制文件中,字節(jié)信息與實(shí)際的數(shù)據(jù)位并不一一對(duì)應(yīng),因此,若直接顯示二進(jìn)制文件內(nèi)容時(shí),用戶看到的是一些不能識(shí)別的字符。
文本文件
二進(jìn)制文件第5頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第5頁(yè)。9.1.3文件的一般操作過(guò)程使用文件的一般步驟打開(kāi)文件→操作文件→關(guān)閉文件打開(kāi)文件:建立用戶程序與文件的聯(lián)系,系統(tǒng)為文件開(kāi)辟文件緩沖區(qū)。操作文件:是指對(duì)文件的讀、寫(xiě)、追加和定位操作。讀操作:從文件中讀出數(shù)據(jù),即將文件中的數(shù)據(jù)輸入到計(jì)算機(jī)內(nèi)存。寫(xiě)操作:向文件中寫(xiě)入數(shù)據(jù),即將計(jì)算機(jī)內(nèi)存中的數(shù)據(jù)輸出到文件。追加操作:將新的數(shù)據(jù)寫(xiě)到文件原有數(shù)據(jù)的后面。定位操作:移動(dòng)文件讀寫(xiě)位置指針。關(guān)閉文件:切斷文件與程序的聯(lián)系,將文件緩沖區(qū)的內(nèi)容寫(xiě)入磁盤(pán),并釋放文件緩沖區(qū)。第6頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第6頁(yè)。9.1.4文件的指針文件型指針變量的定義FILE*變量名;例如:FILE*p;注意:由于文件類型FILE在頭文件stdio.h中定義,所以在使用FILE類型前必須先打開(kāi)stdio.h文件。如果需要對(duì)某一個(gè)文件進(jìn)行讀寫(xiě)操作,必須首先要指定指向它的文件指針。只有通過(guò)文件指針,才能調(diào)用相應(yīng)的文件。當(dāng)程序需要同時(shí)處理多個(gè)文件時(shí),則需要說(shuō)明多個(gè)FILE型的指針變量,使它們分別指向多個(gè)不同的文件。第7頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第7頁(yè)。9.2文件的基本操作9.2.1打開(kāi)和關(guān)閉文件9.2.2最基本的文件讀寫(xiě)函數(shù)第8頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第8頁(yè)。9.2.1打開(kāi)和關(guān)閉文件打開(kāi)文件操作是使用文件的第一個(gè)步驟,而關(guān)閉文件操作則是使用文件的最后一個(gè)步驟。C語(yǔ)言系統(tǒng)分別使用fopen()函數(shù)和fclose()函數(shù)實(shí)現(xiàn)文件的打開(kāi)和關(guān)閉操作。1.文件打開(kāi)函數(shù)fopen()fopen()函數(shù)用來(lái)實(shí)現(xiàn)打開(kāi)文件,它解決如下3個(gè)問(wèn)題:⑴指定要打開(kāi)的文件名;⑵指定文件的使用方式,如是讀文件還是寫(xiě)文件等;⑶為打開(kāi)的文件指定一個(gè)指針變量,以便使用這個(gè)指針變量對(duì)文件進(jìn)行訪問(wèn)。fopen()函數(shù)的調(diào)用方式FILE*fp;fp=fopen(文件名,使用文件的方式);例如:fp=("example.txt","r");表示要打開(kāi)的文件名為example.txt,使用文件的方式是“r”方式,文件指針是fp。第9頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第9頁(yè)。9.2.1打開(kāi)和關(guān)閉文件文件使用方式文件使用方式作用r以“只讀”方式打開(kāi)一個(gè)文本文件w以“只寫(xiě)”方式打開(kāi)一個(gè)文本文件a向文本文件尾增加數(shù)據(jù)rb以“只讀”方式打開(kāi)一個(gè)二進(jìn)制文件wb以“只寫(xiě)”方式打開(kāi)一個(gè)二進(jìn)制文件ab向二進(jìn)制文件尾增加數(shù)據(jù)r+以“讀/寫(xiě)”方式打開(kāi)一個(gè)文本文件w+以“讀/寫(xiě)”方式建立一個(gè)新的文本文件a+以“讀/寫(xiě)/追加”方式打開(kāi)一個(gè)文本文件rb+以“讀/寫(xiě)”方式打開(kāi)一個(gè)二進(jìn)制文件wb+以“讀/寫(xiě)”方式建立一個(gè)新的二進(jìn)制文件ab+以“讀/寫(xiě)/追加”方式打開(kāi)一個(gè)二進(jìn)制文件第10頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第10頁(yè)。9.2.1打開(kāi)和關(guān)閉文件2.關(guān)閉文件函數(shù)fclose()fclose()函數(shù)的一般格式fclose(文件指針);功能關(guān)閉“文件指針”所指向的文件,釋放打開(kāi)文件時(shí)使用的結(jié)構(gòu)體變量,斷開(kāi)文件指針與文件的聯(lián)系。例如:
fclose(fp);第11頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第11頁(yè)。9.2.2最基本的文件讀寫(xiě)函數(shù)1.fputc()函數(shù)一般形式fputc(ch,fp);功能將字符(ch的值)輸出到fp所指向的文件中。第12頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第12頁(yè)。9.2.2最基本的文件讀寫(xiě)函數(shù)例9-1使用fputc()函數(shù)在屏幕顯示一個(gè)字符串。/*programe9-1.c*/
#include<stdio.h>voidmain(){char*p="Thisisaexample.";while(*p!='\0')fputc(*p++,stdout);}設(shè)備文件第13頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第13頁(yè)。9.2.2最基本的文件讀寫(xiě)函數(shù)例9-2
把從鍵盤(pán)輸入的一個(gè)字符串寫(xiě)入到磁盤(pán)文件example.txt中。/*programe9-2.c*/#include<stdio.h>voidmain(){ charch; FILE*fp; fp=fopen("example.txt","w"); printf("Enterastring:"); while((ch=getchar())!='\n')
fputc(ch,fp);
fclose(fp);}
第14頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第14頁(yè)。9.2.2最基本的文件讀寫(xiě)函數(shù)2.fgetc()函數(shù)從指定文件讀入一個(gè)字符,該文件必須是以讀或讀寫(xiě)方式打開(kāi)的。通常使用如下的形式調(diào)用fgetc()函數(shù)ch=fgetc(fp);其中,fp為文件型指針變量,ch為字符變量。正常情況下fgetc()函數(shù)的返回值是從文件中讀出的一個(gè)字符。當(dāng)打開(kāi)文件并立即使用fgetc()讀文件時(shí),fgetc()函數(shù)從文件開(kāi)始位置讀取一個(gè)字符。每讀取一個(gè)字符后,文件的位置指針后移一個(gè)字符位置。若當(dāng)前讀取的是文本文件,當(dāng)遇到文件結(jié)束標(biāo)志時(shí),fgetc()函數(shù)的返回值為EOF。第15頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第15頁(yè)。9.2.2最基本的文件讀寫(xiě)函數(shù)例9-3
使用fgetc()函數(shù)輸出文件example.txt的內(nèi)容。/*programe9-3.c*/#include<stdio.h>voidmain(){ charch; FILE*fp; fp=fopen("example.txt","r"); while((ch=fgetc(fp))!=EOF) putchar(ch); fclose(fp);}
第16頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第16頁(yè)。9.2.2最基本的文件讀寫(xiě)函數(shù)例9-4
使用feof()進(jìn)行文件讀取控制,輸出文件example.txt的內(nèi)容。/*programe9-4.c*/#include<stdio.h>voidmain(){FILE*fp;if((fp=fopen("example.txt","r"))==NULL){printf("filecannotopen!\n");exit(1);}
while(!feof(fp))
putchar(fgetc(fp));fclose(fp);}判斷被讀取的文件是否已經(jīng)讀完。當(dāng)未遇文件結(jié)束標(biāo)志時(shí),feof()的值是0,否則feof()的值是1。第17頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第17頁(yè)。9.3文件的數(shù)據(jù)塊讀寫(xiě)操作9.3.1fwrite()函數(shù)9.3.2fread()函數(shù)第18頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第18頁(yè)。9.3.1fwrite()函數(shù)fwrite()函數(shù)的功能是把內(nèi)存中的一些數(shù)據(jù)塊寫(xiě)到指定的文件中。一般調(diào)用形式fwrite(buffer,size,count,fp);其中:fp是接受數(shù)據(jù)的文件指針;buffer是數(shù)據(jù)塊的內(nèi)存首地址,通常是指針變量名、數(shù)組名等;size是一個(gè)數(shù)據(jù)塊的字節(jié)數(shù)(即數(shù)據(jù)塊的大小);count是執(zhí)行一次fwrite()函數(shù)從內(nèi)存輸出到fp文件的數(shù)據(jù)塊數(shù)目。第19頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第19頁(yè)。9.3.1fwrite()函數(shù)例9-5
從鍵盤(pán)上輸入一批學(xué)生數(shù)據(jù),然后以“stu_list”文件名存儲(chǔ)到磁盤(pán)上。/*programe9-5.c*/#include<stdio.h>#defineN4structstudent_type{charname[10];intnum;intscore;}stud;voidmain(){ inti; FILE*fp; if((fp=fopen("stu_list","wb"))==NULL) { printf("Cannotopenfile\n"); exit(1); } printf("Inputdata,please!\n"); for(i=0;i<N;i++) {scanf("%s%d%d",,&stud.num,&stud.score);
fwrite(&stud,sizeof(structstudent_type),1,fp); } fclose(fp); printf("Allright.\n");}第20頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第20頁(yè)。9.3.2fread()函數(shù)fread()函數(shù)把指定文件中的一個(gè)數(shù)據(jù)塊讀到內(nèi)存中。一般調(diào)用形式fread(buffer,size,count,fp);其中:fp是讀取數(shù)據(jù)的文件指針;buffer是接受文件數(shù)據(jù)的內(nèi)存首地址,通常是指針變量名、數(shù)組名等;size是一個(gè)數(shù)據(jù)塊的字節(jié)數(shù)(即數(shù)據(jù)塊的大?。籧ount是執(zhí)行一次fread()函數(shù)讀取的數(shù)據(jù)塊的數(shù)目。例9-6
將上述stu_list文件的內(nèi)容顯示在屏幕上。/*programe9-6-1.c*/#include<stdio.h>#defineN4structstudent_type{ charname[10]; intnum; intscore;}stud;voidmain(){ inti; FILE*fp; if((fp=fopen("stu_list","rb"))==NULL) { printf("Cannotopenfile.\n"); exit(1); } for(i=0;i<N;i++) { fread(&stud,sizeof(structstudent_type),1,fp); printf("%-10s%4d%4d\n",,stud.num,stud.score); } fclose(fp);}第21頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第21頁(yè)。9.3.2fread()函數(shù)再如,設(shè)有如下定義:structstudent_type{charname[10];intnum;intage;}stud[40];其中,結(jié)構(gòu)體數(shù)組stud的每一個(gè)元素用來(lái)存放一個(gè)學(xué)生的有關(guān)數(shù)據(jù),假設(shè)學(xué)生的數(shù)據(jù)已存放在磁盤(pán)文件中,且該文件已打開(kāi),并由fp指向,則可以用下面的語(yǔ)句把文件中前40個(gè)學(xué)生的數(shù)據(jù)輸入到結(jié)構(gòu)體數(shù)組stud中:for(i=0;i<40;i++)
fread(&stud[i],sizeof(structstudent_type),1,fp);第22頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第22頁(yè)。9.4文件的其他操作9.4.1文件的格式化讀寫(xiě)9.4.2文件的隨機(jī)讀寫(xiě)操作9.4.3ftell()函數(shù)9.4.4文件的字符串操作第23頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第23頁(yè)。9.4.1文件的格式化讀寫(xiě)1.文件的格式化讀操作由fscanf()函數(shù)實(shí)現(xiàn),從指定的文件中,按照說(shuō)明的格式向變量提供數(shù)據(jù)。一般使用格式fscanf(fp,格式字符串,輸入表列);其中fp是文件指針“格式字符串”和“輸入表列”與scanf()函數(shù)的相關(guān)內(nèi)容相同。例如:fscanf(fp,“%d”,&m);該語(yǔ)句將磁盤(pán)文件中的數(shù)據(jù)送給變量m,其中的磁盤(pán)文件由fp指向。第24頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第24頁(yè)。9.4.1文件的格式化讀寫(xiě)2.文件的格式化寫(xiě)操作由fprintf()函數(shù)實(shí)現(xiàn),將指定變量的值按照一定的格式寫(xiě)到指定的文件中。一般使用格式fprintf(fp,格式字符串,輸出表列);說(shuō)明:⑴fp是要寫(xiě)入數(shù)據(jù)的文件指針。⑵“格式字符串”和“輸出表列”與printf()函數(shù)的相關(guān)內(nèi)容形同。例如:
fprintf(fp,"%d",m);該語(yǔ)句將整型變量m按%d格式輸出到fp指向的文件中。例9-7從鍵盤(pán)輸入一個(gè)字符串和一個(gè)十進(jìn)制整數(shù),將它們寫(xiě)入test文件中,然后再?gòu)膖est文件中讀出并顯示在屏幕上。/*programe9-7.c*/#include<stdio.h>voidmain(){ chars[100]; inta; FILE*fp; if((fp=fopen("test","w"))==NULL) {printf("fileopenerror.\n");exit(0);} fscanf(stdin,"%s%d",s,&a); fprintf(fp,"%s%d",s,a); fclose(fp); if((fp=fopen("test","r"))==NULL) {printf("Cannotopenfile.\n");exit(0);} fscanf(fp,"%s%d",s,&a); fprintf(stdout,"%s%d\n",s,a); fclose(fp);}
第25頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第25頁(yè)。9.4.2文件的隨機(jī)讀寫(xiě)操作1.fseek()函數(shù)功能:改變文件位置指針。調(diào)用形式fseek(fp,offset,position);其中:⑴fp為文件型指針;⑵文件位置指針的定位由參數(shù)offset和position共同確定。position規(guī)定指針定位時(shí)的基準(zhǔn)位置,offset規(guī)定文件位置指針離開(kāi)基準(zhǔn)位置的偏移量,它的單位是字節(jié)。position的值用整常數(shù)表示,取值范圍是0、1、2三個(gè)數(shù)之一,其意義如下:0:表示基準(zhǔn)位置為文件的開(kāi)頭位置;1:表示基準(zhǔn)位置為文件的當(dāng)前位置;2:表示基準(zhǔn)位置為文件的結(jié)尾位置,該位置在文件內(nèi)容的最后一個(gè)字節(jié)之后。第26頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第26頁(yè)。9.4.2文件的隨機(jī)讀寫(xiě)操作fseek()函數(shù)調(diào)用的實(shí)例:fseek(fp,50L,0);
將位置指針移到文件頭起始第50個(gè)字節(jié)處fseek(fp,100L,1);
將位置指針從當(dāng)前位置向文件尾方向移動(dòng)100個(gè)字節(jié)fseek(fp,-20L,2);將位置指針從文件末尾向文件頭方向移動(dòng)20個(gè)字節(jié)第27頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第27頁(yè)。9.4.2文件的隨機(jī)讀寫(xiě)操作例9-8
在例9-6中建立了學(xué)生數(shù)據(jù)文件stu_list,將其中第3個(gè)學(xué)生的成績(jī)修改為97。/*programe9-8.c*/#include<stdio.h>structstudent_type{ charname[10]; intnum; intscore;}stud;voidmain(){ inti,size; FILE*fp; size=sizeof(structstudent_type); if((fp=fopen("stu_list","rb+"))==NULL) { printf("fileopenerror.\n"); exit(1); } fseek(fp,2*size,0); fread(&stud,size,1,fp); printf("%s%d%d\n",,stud.num,stud.score); printf("newscore:"); scanf("%d",&stud.score); fseek(fp,-size,1); fwrite(&stud,size,1,fp); fclose(fp);}第28頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第28頁(yè)。9.4.2文件的隨機(jī)讀寫(xiě)操作2.rewind()函數(shù)作用:將文件位置指針復(fù)位。調(diào)用形式rewind(fp);其中:fp為文件型指針。執(zhí)行rewind()函數(shù)后,對(duì)于fp指向的文件,不管當(dāng)前的文件位置指針在何處,都使它復(fù)位到文件的開(kāi)始位置。第29頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第29頁(yè)。9.4.2文件的隨機(jī)讀寫(xiě)操作例9-9
在屏幕上顯示文件e9-6-2.c的內(nèi)容,并將該文件復(fù)制為文件e9-6-3.c。#include<stdio.h>voidmain(){ FILE*fp1,*fp2; fp1=fopen("e9-6-2.c","r"); fp2=fopen("e9-6-3.c","w"); while(!feof(fp1)) putchar(fgetc(fp1)); rewind(fp1); while(!feof(fp1)) fputc(fgetc(fp1),fp2); fclose(fp1); fclose(fp2);}第30頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第30頁(yè)。9.4.3ftell()函數(shù)ftell()函數(shù)用于獲取文件位置指針,其調(diào)用形式如下:ftell(fp);其中:fp為文件指針。ftell()函數(shù)的返回值是fp所指向文件的當(dāng)前讀寫(xiě)位置,該值是一個(gè)長(zhǎng)整型數(shù),是位置指針從文件開(kāi)始處到當(dāng)前位置的位移量的字節(jié)數(shù)。第31頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第31頁(yè)。9.4.3ftell()函數(shù)例9-10
新建data.txt文件,檢查文件位置指針值;然后將字符串"Beijing2008"寫(xiě)入文件中,再檢查文件位置指針的值。#include"stdio.h"main(){FILE*fp;longposition;fp=fopen("data.txt","w");position=ftell(fp);printf("position=%ld\n",position);fprintf(fp,"Beijing2008");
position=ftell(fp);
printf("position=%ld\n",position);fclose(fp);}第32頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第32頁(yè)。9.4.4文件的字符串操作1.fgets()函數(shù)一般調(diào)用形式fgets(buffer,n,fp);作用從fp指向的文件中讀取n-1個(gè)字符,然后存儲(chǔ)到以buffer為首地址的的內(nèi)存空間中,通常buffer是一個(gè)指針變量名、數(shù)組名等。如果在讀入n-1個(gè)字符的過(guò)程中遇到換行符或EOF,讀入即結(jié)束。字符串讀入后在最后加一個(gè)'\0'字符作為字符串結(jié)束標(biāo)志。第33頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第33頁(yè)。9.4.4文件的字符串操作2.fputs()函數(shù)調(diào)用形式fputs(buffer,fp);作用將內(nèi)存buffer中的字符串寫(xiě)到fp指向的文件中,buffer可以是一個(gè)字符串常量,也可以是字符串的首地址。第34頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第34頁(yè)。9.4.4文件的字符串操作例9-11
將字符串"VisualC++"和"Visualbasic"依次存入文件text中,然后將第一個(gè)字符串讀出并顯示出來(lái)。#include<stdio.h>voidmain(){ FILE*fp; charstring[20]; fp=fopen("text","w+"); fputs("VisualC++\n",fp); fputs("Visualbasic\n",fp); rewind(fp); fgets(string,20,fp); puts(string); fclose(fp);}第35頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第35頁(yè)。9.5文件應(yīng)用舉例9.5.1文件復(fù)制9.5.2存儲(chǔ)在文件中的學(xué)生成績(jī)排序第36頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第36頁(yè)。9.5.1文件復(fù)制例9-12
設(shè)計(jì)一個(gè)程序,實(shí)現(xiàn)任意文本文件的復(fù)制。問(wèn)題分析與算法設(shè)計(jì)⑴由于源文件是任意的,所以源文件名應(yīng)通過(guò)鍵盤(pán)輸入;同樣,生成的目標(biāo)文件名也應(yīng)由鍵盤(pán)輸入。⑵源文件以只讀方式打開(kāi),目標(biāo)文件以寫(xiě)方式打開(kāi)。⑶從第一個(gè)字符開(kāi)始,順序逐字符讀出源文件,每讀出一個(gè)字符,立即寫(xiě)入目標(biāo)文件中,使用feof()函數(shù)判斷源文件的結(jié)束狀態(tài)。實(shí)現(xiàn)程序#include<stdio.h>voidmain(){ charch,source[20],target[20]; FILE*fp_s,*fp_t; printf("Enterthesourcefilename:"); scanf("%s",source); printf("Enterthetargetfilename:"); scanf("%s",target); if((fp_s=fopen(source,"r"))==NULL) { printf("Cannotopensourcefile.\n"); exit(1); } if((fp_t=fopen(target,"w"))==NULL) { printf("Cannotopentargetfile.\n"); exit(1); } while(!feof(fp_s)) fputc(fgetc(fp_s),fp_t); fclose(fp_s); fclose(fp_t);}第37頁(yè)/共40頁(yè)C語(yǔ)言程序設(shè)計(jì)文件程序設(shè)計(jì)全文共40頁(yè),當(dāng)前為第37頁(yè)。9.5.2存儲(chǔ)在文件中的學(xué)生成績(jī)排序例9-13
在例9-5中,我們建立了一個(gè)stu_list文件。編寫(xiě)程序,對(duì)該文件的內(nèi)容按照學(xué)習(xí)成績(jī)降序排序后顯示出來(lái)。問(wèn)題分析與算法設(shè)計(jì)⑴定義structstudent_type類型的結(jié)構(gòu)體數(shù)組stud
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司租車(chē)協(xié)議書(shū)正規(guī)模板5篇
- 高原紅病因介紹
- 關(guān)于技術(shù)轉(zhuǎn)讓的協(xié)議
- 雀斑樣痣病因介紹
- 中考政治復(fù)習(xí)知識(shí)專題八七下第四單元做學(xué)法尊法守法的人
- 2023年順酐項(xiàng)目融資計(jì)劃書(shū)
- 《MLCC制程介紹》課件
- 機(jī)械制圖測(cè)試題含答案
- 養(yǎng)老院老人生活?yuàn)蕵?lè)活動(dòng)組織人員職業(yè)發(fā)展規(guī)劃制度
- 養(yǎng)老院老人健康監(jiān)測(cè)報(bào)告制度
- GB/T 36652-2018TFT混合液晶材料規(guī)范
- 國(guó)際商務(wù)談判 袁其剛課件 第四章-國(guó)際商務(wù)談判的結(jié)構(gòu)和過(guò)程
- 國(guó)際商法教案(20092新版)
- 江蘇開(kāi)放大學(xué)漢語(yǔ)作為第二語(yǔ)言教學(xué)概論期末復(fù)習(xí)題
- 貨物質(zhì)量保證措施
- 工作簡(jiǎn)化方法改善與流程分析課件
- 國(guó)家開(kāi)放大學(xué)《管理學(xué)基礎(chǔ)》形考任務(wù)1-4參考答案
- 道德與法治《健康看電視》優(yōu)秀課件
- 急性胰腺炎完整版課件
- 雙絞線鏈路測(cè)試報(bào)告
- 《建筑工程類別劃分標(biāo)準(zhǔn)》-全
評(píng)論
0/150
提交評(píng)論