版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1北京石油化工學(xué)院第10章文件程序中如何獲得數(shù)據(jù)?程序的運(yùn)行結(jié)果存在何處?一個(gè)程序的運(yùn)行結(jié)果做另一個(gè)程序的輸入數(shù)據(jù)?程序初始化賦值語(yǔ)句鍵盤輸入格式輸入字符輸入字符串輸入內(nèi)存外存格式輸出字符輸出字符串輸出內(nèi)存外存文件文件的概念從文件中讀數(shù)據(jù)向文件中寫數(shù)據(jù)2三、文件的處理形式緩沖文件系統(tǒng):磁盤->緩沖區(qū)->程序數(shù)據(jù)非緩沖文件系統(tǒng):程序根據(jù)需要分配空間現(xiàn)在統(tǒng)一使用緩沖文件系統(tǒng)程序數(shù)據(jù)區(qū)輸出文件緩沖區(qū)輸入文件緩沖區(qū)磁盤系統(tǒng)自動(dòng)地在內(nèi)存中為每一個(gè)打開的文件建立一個(gè)緩沖區(qū),文件的存取都通過(guò)緩沖區(qū)進(jìn)行512字節(jié)緩沖文件系統(tǒng)FILE存放文件有關(guān)信息3文緩沖文件系統(tǒng)可以處理兩種不同的文件(ASCII)文本文件二進(jìn)制文件四、文件的存儲(chǔ)方式二進(jìn)制文件:將數(shù)據(jù)按內(nèi)存中的存儲(chǔ)形式輸出到磁盤上ASCII文件:文本文件,按字符處理,每個(gè)字符占一個(gè)字節(jié)例如:102400110001001100000011001000110100
0000010000000000
0000010000000000
ASCII碼1024內(nèi)存形式
整型數(shù)1024
外存形式轉(zhuǎn)換直接
二進(jìn)制文件
文本文件41.創(chuàng)建一個(gè)新文件2.刪除一個(gè)舊文件3.對(duì)文件中的數(shù)據(jù)進(jìn)行讀,寫操作4.對(duì)文件進(jìn)行按名訪問(wèn)5.對(duì)存放文件的空間進(jìn)行管理6.限定文件的使用權(quán)限文件型指針一個(gè)文件系統(tǒng)的功能
C對(duì)文件的管理是通過(guò)一個(gè)文件型指針實(shí)現(xiàn)的操作步驟1.測(cè)試文件存在或新建2.打開文件(將文件從外存調(diào)到內(nèi)存)3.對(duì)文件的操作,通過(guò)庫(kù)函數(shù)實(shí)現(xiàn)4.關(guān)閉文件(將文件清除內(nèi)存)文件型指針5文件型指針是一個(gè)由系統(tǒng)定義的具有固定結(jié)構(gòu)的結(jié)構(gòu)類型變量,用于存放文件的有關(guān)信息一、定義:
FILE*文件指針名二、功能:通過(guò)文件指針實(shí)現(xiàn)對(duì)文件的訪問(wèn)三、過(guò)程:在讀寫文件之前,首先用系統(tǒng)庫(kù)函數(shù)fopen()將指定文件打開,接受文件的外部名,通過(guò)操作系統(tǒng),返回文件的內(nèi)部名,然后通過(guò)文件的內(nèi)部名進(jìn)行讀,寫操作,其中,文件的內(nèi)部名就是文件指針,最后,操作結(jié)束,將文件關(guān)閉FILE6C通過(guò)結(jié)構(gòu)變量FILE對(duì)文件管理,每一個(gè)文件對(duì)應(yīng)的流的控制信息集中在FILE型的結(jié)構(gòu)變量中
typedefstruct{unsignedflags;/*文件狀態(tài)標(biāo)志*/
int-fd;/*文件號(hào)*/
int-cleft;/*緩沖區(qū)剩下的字符*/
int-mode;/*文件操作模式*/
char*-nextc;/*下一個(gè)字符位置*/
char-buff;/*文件緩沖區(qū)位置*/}FILE;用FILE結(jié)構(gòu)體類型可定義數(shù)組、變量、指針例:FILExs[30],a,b,*fp;FILE結(jié)構(gòu)如下:7文件指針是一個(gè)指向FILE的指針FILE*fp;fp代表了數(shù)據(jù)流,稱為文件指針變量C中所有的I/O函數(shù)都是通過(guò)文件指針存取數(shù)據(jù)流(文件)的數(shù)據(jù)定義在stdio.h中8文件必須打開后才能使用通過(guò)文件指針打開文件文件的打開與關(guān)閉一、文件打開函數(shù)1.先定義一個(gè)文件指針FILE*fp;
2.功能:打開文件的過(guò)程是系統(tǒng)為文件分配一個(gè)緩沖區(qū),建立一個(gè)文件內(nèi)部名,返回一個(gè)指向該文件的指針例:fp=fopen(“file.dat”,”r”);fopen(......)文件指針名=fopen(文件名,文件的操作方式)9(1)文件名(2)文件的操作形式(3)哪個(gè)指針指向被打開的文件fp=fopen(“file.dat”,”r”);含義*打開文件名為file.dat文件*fopen函數(shù)帶回一個(gè)指向file.dat文件的指針,并將其賦給文件型指針*文件型指針指向文件file.dat當(dāng)系統(tǒng)使用fopen函數(shù)時(shí),編譯系統(tǒng)會(huì)知道?103.文件的使用方式:“r”從文件中向計(jì)算機(jī)中讀數(shù)據(jù)“w”從計(jì)算機(jī)中向文件中寫數(shù)據(jù)“a”從當(dāng)前打開的文件的結(jié)尾追加新數(shù)據(jù)4說(shuō)明:(1)使用r時(shí),被打開的文件必須存在(2)使用w時(shí),如文件名是新的,則新建一個(gè)文件,如文件名已存在,則覆蓋原來(lái)內(nèi)容11(3)打不開的情況:*使用r,文件不存在*使用w,磁盤已滿,或磁盤損壞此時(shí),fopen()函數(shù)返回一個(gè)NULL在stdio.h中,指定NULL的值為0(4)指定文件名時(shí)可以有路徑,但表示成
fopen(“\\路徑1\\..\\文件名“..…);雙斜杠fp=fopen(“c:\\tc\\file.dat”,”r”);12文件的操作方式:r:從文本文件中讀數(shù)據(jù)rb:從二進(jìn)制文件中讀數(shù)據(jù)r+:從文本文件中讀寫數(shù)據(jù)rb+:從二進(jìn)制文件中讀寫數(shù)據(jù)w:向文本文件中寫數(shù)據(jù)wb:向二進(jìn)制文件中寫數(shù)據(jù)w+:向文本文件中讀寫數(shù)據(jù)wb+:向二進(jìn)制文件中讀寫數(shù)據(jù)a:從指定文本文件末尾添加數(shù)據(jù)ab:從指定二進(jìn)制文件末尾添加數(shù)據(jù)a+:從文本文件頭讀數(shù)據(jù),從文件尾追加數(shù)據(jù)ab+:從二進(jìn)制文件頭讀數(shù)據(jù),從結(jié)尾添加13三、文件關(guān)閉函數(shù)例:FILE*fp;fp=fopen(“file.dat”,”w”);………fclose(fp);如果成功地完成了關(guān)閉操作,函數(shù)fclose()帶回一個(gè)返回值01格式:fclose(文件指針名)2功能:將已打開的文件關(guān)閉(清除內(nèi)存)14文件的讀寫功能:將字符寫入指定文件中,輸出成功時(shí)函數(shù)返回輸出的字符,如果輸出失敗,函數(shù)返回EOF,在stdio.h中EOF定義為
-1。例:fputc(ch,fp);一、字符的讀/寫1.寫字符格式:fputc(字符變量名,文件指針名)2.讀字符格式:fgetc(文件指針名)功能:從指定文件中讀取一個(gè)字符,賦給字符變量如果讀取成功,函數(shù)帶回讀取的字符,如果遇到結(jié)束符,函數(shù)返回-1。
例:ch=fgetc(fp);
15#include<stdio.h>main(){FILE*fp;charch='a';fp=fopen("file.dat","w");fputc(ch,fp);fclose(fp);}結(jié)果:將字符a寫入文件file.dat中#include<stdio.h>main(){FILE*fp;charc1;fp=fopen("file.dat","r");c1=fgetc(fp);putchar(c1);fclose(fp);}從文件file.dat中,將剛才寫入的字符讀出16二、字符串的讀寫函數(shù)1.寫字符串格式:fputs(字符數(shù)組名,文件型指針名)功能:向指定文件中寫入指定的字符串(字符數(shù)組或字符指針)函數(shù)成功,返回值為0,否則,返回值為非0值2.讀字符串格式:fgets(字符數(shù)組名,n,文件指針名)功能:從指定文件中,讀n-1個(gè)字符,送到指定的字符數(shù)組(或字符指針)中,函數(shù)成功,返回串的首地址
字符串讀入后,系統(tǒng)追加一個(gè)‘\0’
如果在n-1個(gè)字符內(nèi)遇換行符或EOF,提前結(jié)束17#include<stdio.h>main(){FILE*fp;char*c1="TruboC";charc2[10];
fp=fopen("file2.dat","w");fputs(c1,fp);fclose(fp);
fp=fopen("file2.dat","r");fgets(c2,8,fp);printf("%s\n",c2);fclose(fp);}18功能:從指定的文件中,按指定格式讀取變量送入對(duì)應(yīng)的地址中文件的讀寫三、格式讀寫1.格式寫:fprintf(文件指針,格式控制串,輸出表列);功能:將指定的變量按指定的格式,寫入指定的文件中2.格式讀:fscanf(文件指針,格式控制串,輸入表列)注意比較Scanf(“%d,%d”,&a,&b);fscanf(fp,”%d,%d”,&a,&b);printf(“%d,%d\n”,a,b);fprintf(fp,”%d,%d\n”,a,b);19#include<stdio.h>main(){FILE*fp;char*c1="TurboC";charc2[10];fp=fopen("file3.dat","w");fprintf(fp,"%s",c1);fclose(fp);fp=fopen("file3.dat","r");fscanf(fp,"%s",c2);printf("%s\n",c2);fclose(fp);}20fscanf(),fprintf()文件按格式讀寫scanf(),printf()標(biāo)準(zhǔn)輸入,輸出設(shè)備讀寫fputs()fgets()文件讀寫一個(gè)串puts()gets()標(biāo)準(zhǔn)設(shè)備讀寫一個(gè)串fputc()fgetc()文件讀寫一個(gè)字符putchar()getchar()標(biāo)準(zhǔn)設(shè)備讀寫字符函數(shù)名,參數(shù),功能21f為一個(gè)實(shí)型數(shù)組的數(shù)組名(起始地址)4為一次讀4個(gè)字節(jié)2為從文件中讀2次四、按數(shù)據(jù)塊讀寫1.寫數(shù)據(jù)塊:fwirte(buffer,size,count,fp);
fread(f,4,2,fp);從文件中讀取數(shù)據(jù),存入數(shù)組f中,函數(shù)成功,返回count的值2.讀數(shù)據(jù)塊:fread(buffer,size,count,fp);buffer
為所讀數(shù)據(jù)的存放地址size:
要讀的字節(jié)數(shù)(數(shù)據(jù)塊的大?。ヽount:讀幾個(gè)數(shù)據(jù)塊fp為文件型指針22文件狀態(tài)檢測(cè)在文件處理過(guò)程中,有時(shí)輸入輸出函數(shù)需要文件的狀態(tài)信息,最常用的是判斷文件是否結(jié)束C提供了兩種方法判斷文件是否結(jié)束一、關(guān)鍵字EOF讀寫文本文件時(shí),用EOF判斷是否已經(jīng)讀到了文件尾,此時(shí)EOF的值為-1while((c=fgetc(fp)!=EOF))文件沒(méi)結(jié)束
putchar(c);輸出讀出的字符不能用于二進(jìn)制文件例如:fgetc從文件中讀字符,一次讀一個(gè),可以判斷23二、使用庫(kù)函數(shù)格式:feof(文件指針名)功能:當(dāng)文件結(jié)束時(shí),返回非0值,文件未結(jié)束,返回0while(feof(fp)==0)c=fgetc(fp);例:從文件中一次讀一個(gè)字符,直到文件結(jié)束24#include<string.h>#include<stdlib.h>#include<stdio.h>main(){FILE*fp;inti=0;charstr[81],filename[80];gets(filename);if((fp=fopen(filename,"w"))==NULL){printf("cannotopenthisfile\n");exit(0);}while(strlen(gets(str))>0){fputs(str,fp);fputs("\n",fp);i++;}fclose(fp);fp=fopen(filename,"r");while(feof(fp)==0){fgets(str,i-1,fp); puts(str);}}從鍵盤輸入若干個(gè)串,將它們寫到磁盤上25請(qǐng)補(bǔ)充main函數(shù),該函數(shù)的功能是:先以只寫方式打開文件"out11.dat",再把字符串str中的字符保存到這個(gè)磁盤文件中。
注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在main函數(shù)的橫線上填入所編寫的若干表達(dá)式或語(yǔ)句。
試題程序:
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#defineN80
voidmain()
{fILE*fp;
inti=0;
charch;
charstr[N]="I'mastudent!";
system("CLS");
if((fp=fopen(【1】))==NULL)
{printf("cannotopenout11.dat\n");
exit(0);}while(str[i
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年專用打印機(jī)采購(gòu)銷售協(xié)議范本
- 2024年個(gè)人借款協(xié)議模板
- 2024年家用壁紙買賣協(xié)議模板
- 2023-2024學(xué)年浙江省余姚八中高考第四次模擬數(shù)學(xué)試題試卷
- 2024年企業(yè)融資中介協(xié)議范本
- 2024無(wú)財(cái)產(chǎn)瓜分離婚協(xié)議示范文本
- DB11∕T 1717-2020 動(dòng)物實(shí)驗(yàn)管理與技術(shù)規(guī)范
- DB11∕T 1601-2018 毛白楊繁育技術(shù)規(guī)程
- 2024設(shè)備維護(hù)與保養(yǎng)協(xié)議范本
- 2024年專業(yè)收銀員崗位聘用協(xié)議樣本
- 基本函數(shù)的導(dǎo)數(shù)表
- 酒店的基本概念
- 重點(diǎn)但位消防安全標(biāo)準(zhǔn)化管理評(píng)分細(xì)則自評(píng)表
- 掛牌儀式流程方案
- 傳輸s385v200v210安裝手冊(cè)
- 風(fēng)險(xiǎn)調(diào)查表(企業(yè)財(cái)產(chǎn)保險(xiǎn))
- 農(nóng)業(yè)信息技術(shù) chapter5 地理信息系統(tǒng)
- 淺談新形勢(shì)下加強(qiáng)企業(yè)稅務(wù)管理的對(duì)策研究
- 必看!設(shè)備管理必須要懂的一、二、三、四、五
- 空冷島專題(控制方案、諧波及變壓器容量選擇)
- 結(jié)合子的機(jī)械加工工藝規(guī)程及銑槽的夾具設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論