計算機計算機二級C語言程序設(shè)計 第12講_第1頁
計算機計算機二級C語言程序設(shè)計 第12講_第2頁
計算機計算機二級C語言程序設(shè)計 第12講_第3頁
計算機計算機二級C語言程序設(shè)計 第12講_第4頁
計算機計算機二級C語言程序設(shè)計 第12講_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第12講文件

內(nèi)容提要

?文件概述

■標,文件操作

文件概述

-文件是指存放在外存儲器上的信息的集合

?數(shù)據(jù)文件的存儲形式

⑴文本文件(ASCH文件)

?按數(shù)據(jù)的ASCH形式存儲

(2)二進制文件

?按數(shù)據(jù)在內(nèi)存中的二進制形式存儲

上一頁c=^l藤爐下一頁

標準文件與非標準文件

利用緩沖區(qū)將對磁盤文件的頻繁逐次訪問變?yōu)榕吭L問的做法稱為標準文件操

輸出文件緩沖區(qū)

輸入文件緩沖區(qū)

上一頁方雷下一頁

文件的存取方式

標準I/O提供了4種文件存取方法

(1)讀寫一個字符

'(2)讀寫一個字符串,符多個字符組成的字符串寫入文件或從文件中讀出。

(3)格式化讀寫,根據(jù)格式控制指定的數(shù)據(jù)格式對數(shù)據(jù)進行轉(zhuǎn)換存取。

(4)成塊讀寫,也稱做按記錄讀寫。

4種存取方式和C語言的對應(yīng)的函數(shù)關(guān)系:

將多個字節(jié)作為一個數(shù)據(jù)塊存取

freadfwrite

字符存取字符串存取格式存取

fgetcfgetsfputsfscanffprintf

fputc例如讀取多個字節(jié)例如,將兩個字節(jié)的數(shù)據(jù)10^>

作為整型數(shù)存取

上一頁

標準文件FILE結(jié)構(gòu)指針

?FILE類型

>保存被使用的文件的有關(guān)信息

>所有的文件操作都需要FILE類型的指針

>FILE是庫文件中定義的結(jié)構(gòu)體的別名

>注意不要寫成structFILE

?舉例

>FILE*fp;

上一頁c=^l藤爐下一頁

FILE類型

typedefstruct{

shortlevel;/*緩沖區(qū)滿空程度*/

unsignedflags;/*文件狀態(tài)標志*/

charfd;/*文件描述符*/

unsignedcharhold;/*無緩沖則不讀取字符*/

shortbsize;/*緩沖區(qū)大小*/

unsignedchar"buffer;/*數(shù)據(jù)緩沖區(qū)*/

unsignedchar*curp;/*當刖位置指針*/

unsignedistemp;/*臨時文件指不器*/

shorttoken;/*用于白效性檢查*/

}FILE;

上一頁方爐下一頁

,產(chǎn)文件的打開(fopen函數(shù))

?函數(shù)原型

FILE*fopen(char*filename,*mode);

?參數(shù)說明

>filename:要打開的文件路徑

>mode:打開模式

?返回值

若成功,返回指向被打開文件的指針

若出錯,返回空指針NULL(0)

上一頁c=^l藤爐下一頁

,產(chǎn)文件的打開模式

文件操作方式含義

什“(只讀)為只讀打Q個字符文件

"w"(只寫)為只寫打開一個字符文件,文件指針指

向文件首部

“a”(追加)打開字符文件,指向文件尾,在已存在

的文件中追加數(shù)據(jù)

“rb”(只讀)為只讀打?1—個一進制文件

"wb"(只寫)為只與打開一個一進制文件

“ab“(追加)打開一進制文件,以向文件追加數(shù)據(jù)

“r+“(讀寫)以讀與方式打Q個已存在的字符文件

“w+“(讀寫)為讀寫建立一個新的字符文件

“a+“(讀寫)為讀與打開一個字符文件,進行追加

“rb+”(讀寫)為讀與打Q個一進制文件

“wb+”(讀寫)為讀寫建立一個新的二進制文件

“ab+”(讀寫)為讀寫打開一個二進制文件進行追加

上一頁c=^l藤爐下一頁

文件的打開舉例

FILE*fpl,*fp2;

/*以文本只讀方式打開filei*/

if(!(fpl=fopen(〃filel〃,〃:r〃))){

printf(^CannotOpenThisFile!\n/z);

exit(0);/*退出程序*/

}

/*以二進制讀寫方式打開FILE2.TXT*/

fp2=fopen(Z,C:\\HOME\\FILE2.TXT",〃rb+〃);

上一頁c=^l藤爐下一頁

文件的關(guān)閉(fclose函數(shù))

?函數(shù)原型

>intfclose(FILE*fp);

?參數(shù)說明

>fp:要關(guān)閉的文件指針

?返回值

>若成功,返回0

>若出錯,返回EOF(T)

-不用的文件應(yīng)關(guān)閉,防止數(shù)據(jù)破壞丟失

上一頁c=^l藤爐下一頁

文件的關(guān)閉舉例

FILE*fp;

charfile[]='D:\\USER\\STUDENTS.DAT";

if(!(fp=fopen(file,〃rb+〃))){

printf(''Openfile%serror!\n,z,file);

exit(0);

}

fclose(fp);

上一頁運1本爐下一頁

讀寫操作⑴

?讀寫文件中字符的函數(shù):

、》從磁盤文件讀取字符的函數(shù)是fgetc(),形式為:

>intfgetc(FILE*stream);詳細說明

>將一個字符寫入磁盤文件的函數(shù)是fputcO,其形式為:

>intfputc(intch,FILE*stream);詳細說明

>注:getc()和fgetc()功能相同,putc()和fputc()相同

?府用舉例

上一頁c=^l藤爐下一頁

讀寫操作⑵

?讀寫文件中字符串的函數(shù):

?從磁盤文件讀取字符串的函數(shù)是fgets(),形式為:

>char*fgets(char*str,intn,FILE*stream)

>詳細說明

?將一個字符串寫入磁盤文件的函數(shù)是fputS(),其形式為:

>char*fputs(char*str,FILE*stream);

>詳細說明

?巾用舉例

上一頁c=^l藤爐下一頁

讀寫操作⑶

?格式化讀寫函數(shù)

>函數(shù)原型

?intfscanf(FILE*fp,char*format[,address,

?intfprintf(FILE*fp,char*format[,argument,...]);

>說明

?與printf和scanf函數(shù)類似

?從文件輸入或輸出到文件

■應(yīng)用舉例

上一頁c=^l藤爐下一頁

標準的隨機讀寫(1)

?文件指針定位函數(shù)

:>文件位置指針

?位置指針指向當前讀寫的位置

?每次讀寫文件,位置指針都會相應(yīng)移動

?可以通過相關(guān)函數(shù)強制修改位置指針

>相關(guān)函數(shù)

?rewind函數(shù)詳細說明

?fseek函數(shù)詳細說明

?ftell函數(shù)詳細說明

上一頁c=^l藤爐下一頁

標準的隨機讀寫(2)

?文件隨機讀寫函數(shù):fwriteffifread

>size_tfwrite(void*buffer,

sizetsize,

sizetcount,

FILE*fp);

>size_tfread(void*buffer,

size_tsize,

size_tcount,

FILE*fp);

>參數(shù)說明

■應(yīng)用舉例

上一頁c=^l藤爐下一頁

fgetc/getc函數(shù)

?函數(shù)原型

>intfgetc(FILE*fp);

>intgetc(FILE*fp);

?參數(shù)

>fp:文件指針

?返回值

>若成功,返回輸入的字符

>若失敗或文件結(jié)束,返回EOF

fputc/putc函數(shù)

?函數(shù)原型

>intfputc(intc,FILE*fp);

>intputc(intc,FILE*fp);

?參數(shù)

>c:要輸出到文件的字符

>fp:文件指針

?返回值

>若成功,返回輸出的字符

>若失敗或文件結(jié)束,返回EOF

1D^>

讀寫文件中字符的函數(shù)

voidmain()

{

FILE*fp;/*定義FILE結(jié)構(gòu)指針變量*/

charch;

if((fp=fopen(〃datal.txt〃,〃r〃))==NULL)/*打開并測試文件

*/

(

printf(〃filecannotbeopened\n);

exit(1);/*若文件打開不成功,退出*/

while((ch二fgetc(fp))!二EOF)/*讀文件并測試是否文件尾*/

fputc(ch,stdout);/*輸出到標)隹設(shè)備文件(顯示器)顯示*/

fclose(fp);A關(guān)閉文件*/

fgets函數(shù)

?函數(shù)原型

>char*fgets(char*s,intn,FILE*fp);

?返回值,

>若成功,返回s首地址;若失敗,返回NULL

?說明

>從fp輸入字符串到s中

>輸入n-1個字符,或遇到換行符或EOF為止

>讀完后自動在字符串末尾添加''0'

fputs函數(shù)

?函數(shù)原型

>intfputs(char*s,FILE*fp);

?返回值

>若成功,返回輸出字符個數(shù)(或最后的字符)

>若失敗,返回EOF

?說明

>字符串的結(jié)束標志''0'不會輸出到文件

>也不會在字符串末尾自動添加換行符

讀寫文件中字符串的函數(shù)

ttinclude<stdio.h>

voidmain()

{FILE*fp2;

charbuffer[64];

if((fp2=fopen(〃data2.txt〃,〃r〃))=NULL)/*以只讀方式打開文件,

且測試*/

(

printf(〃can'topenfile\n〃);

exit⑴;/*打開不成功退出*/

)

while(!feof(fp2))/*測試文件是否結(jié)束*/

(

if(fgets(buffer,64,fp2)!=NULL)/*讀一行字符并測試是否為空*/

printf(〃%s〃,buffer);/*顯示該行字符*/

fclose(fp2);/*關(guān)閉文件*/

格式化讀寫函數(shù)

/*2007-4*/

^include<stdio.h>

main()

{FILE*fp;intk,n,a[6]={1,2,3,4,5,6};

fp二fopen(〃d2.dat〃,〃w〃);

fprintf(fp,〃%d%d%d\n〃,a[0],a[l],a[2]);

fprintf(fp,〃%d%d%d\n〃,a[3],a[4],a[5]);

fclose(fp);

fp二fopen(〃d2.dat〃,〃r〃);

fscanf(fp,〃%d%d〃,&k,&n);

輸出結(jié)果:

printf(〃%d%d\n〃,k,n);

123456

fclose(fp);

rewind函數(shù)

?函數(shù)原型

>voidrewind(FILE*fp);

?參數(shù)

>fp:文件指針

?功能

>使文件位置指針重新返回文件開頭

fseek函數(shù)(1)

-函數(shù)原型

>intfseek(FILE*fp,longoffset,intwhence);

?參數(shù)

>fp:文件指針

>offset:偏移量

>whence:起始位置

?功能

>隨機改變文件的位置指針

fseek函數(shù)(2)

?起始位置

'>SEEK_SET(0):文件開始

>SEEK_CUR(1):文件當前位置

>SEEK_END(2):文件末尾

?舉例

>fseek(fp,100L,SEEK?SET);

>fseek(fp,-10L,SEEK_CUR);

>fseek(fp,-20L,SEEK_END);

ftell函數(shù)

?函數(shù)原型

>longftell(FILE*fp);

?參數(shù)

>fp:文件指針

?返回值

>若成功,返回當前文件指針位置

>若出錯,返回TL

1D^>

£01'五0和"6@(1函數(shù)說明

?參數(shù)

:>buffer:要讀/寫的數(shù)據(jù)塊地址

>size:要讀/寫的每個數(shù)據(jù)項的字節(jié)數(shù)

>count:要讀/寫的數(shù)據(jù)項數(shù)量

>fp:文件指針

?返回值

>若成功,返回實際讀/寫的數(shù)據(jù)項數(shù)量

>若失敗,一般返回0

文件隨機讀寫函數(shù)

/*2006-9*/

#include<stdio.h>

main()

{FILE*fp;inti;

charch口二〃abcd〃,t;

fp=fopen(〃abc.dat〃,〃wb+〃);

for(i=0;i<4;i++)fwrite(&ch[i],1,1,fp);

fseek(fp,-2L,SEEK__END);

fread(&t,1,1,fp);

fclose(fp);

printf(“%c\n",t);/*輸出

c

2007年4月

設(shè)有定義:FILE*fw;,請將以下打開文件的語句補充完整,以便可以向文本文件

readme,txt的最后續(xù)寫內(nèi)容。

fw=fopen("readme,txt”,)

〃〃

a

上一頁c=^l藤爐下一頁

2007年4月

粼一

有以下程序

#include<stdio.h>

main()

{FILE*fp;inti,a[6]={l,2,3,4,5,6};

fp二fopen("d3.dat“,“wb+”);

fwrite(a,sizeof(int),6,fp);

fseek(fp,sizeof(int)*3,SEEK_SET);/*該語句使讀文件的位置指針從文件

頭向后移動3個int型數(shù)據(jù)*/

fread(a,sizeof(int),3,fp);fclose(fp);

for(i=0;i<6;i++)printf(a%d,",a[i]);

)

程序運行后的輸出結(jié)果是()

A)4,5,6,4,5,6,B)1,2,3,4,5,6,

C)4,5,6,1,2,3,D)6,5,4,3,2,1,

上一頁c=^l藤爐下一頁

2007年9月

1、讀取二進制文件的函數(shù)調(diào)用形式為:fread(buffer,size,count,fp);,其

中buffer代表的是

A)一個文件指針,指向待讀取的文件

B)一個整型變量,代表待讀取的數(shù)據(jù)的字節(jié)數(shù)

O一個內(nèi)存塊的首地址,代表讀入數(shù)據(jù)存放的地址

D)一個內(nèi)存塊的字節(jié)數(shù)

上一頁c=^l藤爐下一頁

2007年9月

2、有以下程序

#include<stdio.h>

main()

{FILE*fp;inta[10]={l,2,3,0,0},i;

fp=fopen(/zd2.dat,〃wb〃);

fwrite(a,sizeof(int),5,fp);fwrite(a,sizeof(int),5,fp);

fclose(fp);

fp=fopen(〃d2.dat〃,〃rb〃);

fread(a,sizeof(int),10,fp);

fclose(fp);

for(i=0;i<10;i++)printf(〃%d〃,a);

)

程序的運行結(jié)果是

A)1,2,3,0,0,0,0,0,0,0,B)1,2,3,1,2,3,0,0,0,0,

0123,0,0,0,0,123,0,0,0,0,D)1,2,3,0,0,1,2,3,0,0,

上一頁c=^l藤爐下一頁

2008年4月

1、以下敘述中錯誤的是

A)gets函數(shù)用于從終端讀入字符串

B)getchar函數(shù)用于從磁盤文件讀入字符

0fputs函數(shù)用于把字符串輸出到文件

D)fwrite函數(shù)用于以二進制形式輸出數(shù)據(jù)到文件

上一頁c=^l藤爐下一頁

2008年4月

2、有以下程序

#include<stdio.h>

main()

{FILE*fp;inta[10]={l,2,3),i,n;

fp二fopen(〃dl.dat〃,“w〃);

for(i=0;i<3;i++)fprintf(fp,〃%d〃,a[i]);

fprintf(fp,〃\n〃);fclose(fp);

fp二fopen(〃dl.dat〃,〃r〃);

fscanf(fp,〃%d〃,&n);

fclose(fp);printf(〃%d\n〃,n);

)

程序的運行結(jié)果是

A)12300B)123C)1D)321

上一頁下一頁

2008年4月

3、以下程序從名為filea.dat的文本文件中逐個讀入字符并顯示在屏幕上。請?zhí)?/p>

工CA?。

#include<stdio.h>

main()

{FILE*fp;charch;

fp=fopen([15J);

ch=fgetc(fp);

while(!feof(fp)){putchar(ch);ch=fgetc(fp);}

putcharC\n,);fclose(fp);

〃f「i?l1ea.d1at」〃,〃r〃

上一頁下一頁

2008年9月

1、有以下程序

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論