




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
國(guó)守錨甌盥器
#include<math.h>
?第九章
#defineEPS1
voidmain
[對(duì)月目定義函數(shù)原型說(shuō)明
scan
doub
double
while(
n=n+l;
信息科學(xué)技術(shù)學(xué)院C語(yǔ)言程序設(shè)計(jì)教學(xué)組
±||
第九章文件
內(nèi)容提要:
文本文件與二進(jìn)制文件文件分類(lèi)
緩沖文件系統(tǒng)概念緩沖文件系統(tǒng)
文件的指針文件的指針
文件的打開(kāi)與關(guān)閉文件打開(kāi)與關(guān)閉
文件應(yīng)用文件應(yīng)用
第九章文件
文件是指存儲(chǔ)在外部介質(zhì)
上,且按文件名訪問(wèn)的一組
信息序列。
一、文件分類(lèi)
?文本文件(字符代碼文件或ASCII代碼文件)
由一個(gè)一個(gè)字符組成,每一個(gè)字符用一個(gè)
ASCII代碼表示,如123.45以ASCII代碼形式
存儲(chǔ)到磁盤(pán)需要6個(gè)字節(jié)。
特點(diǎn):可通過(guò)顯示器或打印機(jī)顯示,即可讀,
比較直觀。
一、文件分類(lèi)
?非文本文件(二進(jìn)制文件):是指以數(shù)據(jù)
在內(nèi)存中的存儲(chǔ)形式原樣輸出存儲(chǔ)到磁盤(pán)上的
文件。如123.45在內(nèi)存中以浮點(diǎn)數(shù)形式存儲(chǔ)占
4個(gè)字節(jié),不管一個(gè)實(shí)數(shù)多大都占4字節(jié)。
特點(diǎn):節(jié)省存儲(chǔ)空間,輸入輸出無(wú)需轉(zhuǎn)換
速度快,不便閱讀。
說(shuō)明:
?一個(gè)c文件是一個(gè)字節(jié)流或二進(jìn)制流,它把
數(shù)據(jù)看作是一連串的字符序列(字節(jié)),而不
考慮記錄的界限,即c文件并不是由記錄組成的。
?由于對(duì)文件的操作要與各種外部設(shè)備發(fā)生聯(lián)
系,因此對(duì)文件的輸入輸出(讀寫(xiě))過(guò)程是通
過(guò)操作系統(tǒng)來(lái)實(shí)現(xiàn)的。對(duì)文件的讀寫(xiě)都是通過(guò)
標(biāo)準(zhǔn)的I/O函數(shù)進(jìn)行的。
二、緩沖文件系統(tǒng)(標(biāo)準(zhǔn)I/O)和非緩沖文件系統(tǒng)
?緩沖文件系統(tǒng)(又稱(chēng)標(biāo)準(zhǔn)或高層文件系統(tǒng))
特點(diǎn):對(duì)程序中的每一個(gè)文件都在內(nèi)存中開(kāi)辟
一個(gè)“緩沖區(qū)”。
作用:從磁盤(pán)文件讀入的數(shù)據(jù)先送到“輸入緩
沖區(qū)”中,然后再?gòu)木彌_區(qū)依次將數(shù)據(jù)送給接
收變量。
程序數(shù)據(jù)區(qū)(512KB)
在向磁盤(pán)文件輸出數(shù)據(jù)時(shí),先將程序數(shù)據(jù)區(qū)中變量
或表達(dá)式的值送到“輸出文件緩沖區(qū)”中,待裝滿(mǎn)后
才一起輸出給磁盤(pán)文件。目的減少對(duì)磁盤(pán)的讀寫(xiě)次數(shù),
即一次可以讀入一批數(shù)據(jù)或輸出一批數(shù)據(jù)。
二、緩沖文件系統(tǒng)(標(biāo)準(zhǔn)I/O)和非緩沖文件系統(tǒng)
?非緩沖文件系統(tǒng):不由系統(tǒng)自動(dòng)設(shè)置所需
緩沖區(qū),而由用戶(hù)自己根據(jù)需要設(shè)置。
?新的ANSI標(biāo)準(zhǔn)只建議使用緩沖系統(tǒng),并對(duì)
緩沖文件系統(tǒng)的功能進(jìn)行了擴(kuò)充,使既能用于
處理字符代碼文件,也能處理二進(jìn)制文件。
三、文件型指針類(lèi)型
對(duì)文件的操作是通過(guò)文件指針實(shí)現(xiàn)的。關(guān)鍵
的概念是“”。
調(diào)用一個(gè)文件需要的信息:.
?文件當(dāng)前讀寫(xiě)的位置;
?與該文件對(duì)應(yīng)的內(nèi)存緩沖區(qū)的地址;
?緩沖區(qū)未被處理的字符數(shù)(字符指針);
?文件的操作方式等
JL>1II1I11y.x-lilLlASP]\生
三、文件型指針類(lèi)型
系統(tǒng)內(nèi)部定義了一個(gè)稱(chēng)FILE的結(jié)構(gòu)型類(lèi)型。
typedefstruct{
int_fd;//文件號(hào)
int_cleft;//緩沖區(qū)中剩余的字符
int_mode;//文件操作模式
char*nextc;//下一個(gè)字符位置
char*_buff;//文件緩沖區(qū)位置
1FILE;
四、文件的打開(kāi)和關(guān)閉
1.打開(kāi)文件:是在用戶(hù)程序和操作系統(tǒng)之
間建立起聯(lián)系,程序要把操作的文件的一些信
息通知操作系統(tǒng),如文件名、文件操作方式
(讀/寫(xiě)):
需要先確認(rèn)此文件是否已存在,并
將讀當(dāng)前位置設(shè)定為文件的開(kāi)頭。
寫(xiě)文件:需要檢查原來(lái)是否有同名文件,如
有則將該文件原有內(nèi)容刪除,如無(wú)同名文件就
建立一個(gè)新文件,然后將寫(xiě)當(dāng)前位置設(shè)定于文
件的開(kāi)頭,以便從文件開(kāi)頭寫(xiě)入數(shù)據(jù)。
1.文件的打開(kāi)方式:
FILE*fp;
if((fp二"pen(〃文件名〃,〃使用文件方式〃))二二NULL){
printf(z,cannotopenthisfile.'n");
exit(0);
)
說(shuō)明:
?文件名可以是字符串常量、數(shù)組名或字符指針。
?使用文件方式參見(jiàn)附表。
FILE*fp;
if((fp=fopen(〃文件名〃,〃使用文件方式〃))二二NULL){
printf(,zcannotopenthisfile.'n");exit(0);
)
文件使用方式含義
r(只讀)為輸入打開(kāi)一個(gè)字符文件
w(只寫(xiě))為輸出打開(kāi)一個(gè)字符文件
a(追加)向字符文件尾部增補(bǔ)數(shù)據(jù)
rb(只讀)為輸入打開(kāi)一個(gè)二進(jìn)制文件
wb(只寫(xiě))為輸出打開(kāi)一個(gè)二進(jìn)制文件
ab(追加)向二進(jìn)制文件尾部增補(bǔ)數(shù)
r+(讀寫(xiě))為讀/寫(xiě)打開(kāi)一個(gè)字符文件
w+(讀寫(xiě))為讀/寫(xiě)建立一個(gè)新的字符文件
a+(讀寫(xiě))為讀/寫(xiě)打開(kāi)一個(gè)字符文件
rb+(讀寫(xiě))為讀/寫(xiě)打開(kāi)一個(gè)二進(jìn)制文件
wb+(讀寫(xiě))為讀/寫(xiě)建立一個(gè)新的二進(jìn)制文件
ab+(讀寫(xiě))為讀/寫(xiě)打開(kāi)一個(gè)二進(jìn)制文件
2.文件的關(guān)閉
文件的關(guān)閉形式:
fclose(fp);
功能:將fp所指文件關(guān)閉。
?釋放文件有關(guān)信息區(qū);
?將輸出文件緩沖區(qū)的內(nèi)容(無(wú)論緩沖區(qū)是否為滿(mǎn))
都輸出寫(xiě)入文件,然后關(guān)閉文件,這樣可防止丟
失本來(lái)應(yīng)寫(xiě)入文件的數(shù)據(jù)。
五、文件應(yīng)用示例
[例1]:格式化的輸入輸出。
功能:將輸出按格式串規(guī)定輸出到fp所指文件。
功能:從fp所指文件按格式串讀入數(shù)據(jù)。函數(shù)執(zhí)行成功
返回讀得的數(shù)據(jù)項(xiàng)個(gè)數(shù);若在讀第一項(xiàng)前已到達(dá)文件
結(jié)束處,則返回EOF。
#incIude<stdio.h>
#incIude<process.h>
#incIude<string.h>
voidmain(){
FILE*fp;charname[10];intnum;fIoatscore;
if((fp=fopen("fiIe3.txt",〃w+"))二二NULL){
printf(z,cannotopenthisfile.\n〃);
exit(0);
)
printf(z,entername,num,score:,z);
,z
scanf(%s%d%f〃,name,&num,&score);
whiIe(strIen(name)>1){
fprintf(fp,"%s%d%f\n,z,name,num,score);
printf(z,entername,num,score:;
scanf(,z%s%d%f,z,name,&num,&score);
rewind(fp);
while(fscanf(fp,z,%s%d%f〃,
name,&num,&score)!=EOF)
printf(z,%-10s%6d%6.2f\n,z,name,num,score);
fcIose(fp);
)
輸入:entername,num,score:zhangsan050190/
entername,num,score:liming050285/
entername,num,score:gaofei050395/
entername,num,score:000/
輸出:zhangsan050190.00
1iming050285.00
gaofei050395.00
[例2]:數(shù)據(jù)塊(二進(jìn)制形式)的讀寫(xiě)。
功能:從指定文件讀入count個(gè)大小為size的字
節(jié)數(shù)據(jù)塊,存入buffer所指存儲(chǔ)單元。返回所
讀的數(shù)據(jù)項(xiàng)個(gè)數(shù),如遇文件結(jié)束或出錯(cuò)返回0。
功能:buffer所指存儲(chǔ)單元的數(shù)據(jù)取
size*count個(gè)字節(jié)送fp所指文件。返回寫(xiě)到fp
所指文件中的數(shù)據(jù)項(xiàng)個(gè)數(shù)。
[例2]:數(shù)據(jù)塊(二進(jìn)制形式)的讀寫(xiě)。
說(shuō)明:
?buffer'為輸入輸出在內(nèi)存中存放的首地址。
?siz為讀、寫(xiě)的字節(jié)數(shù),即數(shù)據(jù)塊的大小。
?count為輸入輸出的數(shù)據(jù)項(xiàng)個(gè)數(shù)。
?fread()和-riteO用于二進(jìn)制文件的輸入
輸出
#incIude<stdio.h>
#incIude<process.h>
#defineSIZE4
structstudent{
charname[10];intnum,age;charaddr[15];
}stud[SIZE];
voidsave_Ioad(){
FILE*fp;inti;
,,
if((fp=fopen(stu_Iist","wb+〃))=二NULL){
printf("cannotopenfile.'n");exit(0);
1
for(i=0;i<SIZE;i++)
if(fwrite(&stud[i],sizeof(structstudent),1,fp)!=1){
printf(,,fiIewriteerror!\n,");exit(0);
rewind(fp);
for(i=0;i<SIZE;i++)
if(fread(&stud[i],sizeof(structstudent),1,fp)!=0)
printf-1Os%4d%4d%75s\n”,stud[i].name,
stud[i].num,stud[i].age,stud[i].addr);
)
voidmain(){
inti;
for(i=0;i<SIZE;i++)
scanf(,z%s%d%d%s”,stud[i].name,&stud[i].num,
&stud[i].age,stud[i].addr);
save_Ioad();
)
輸入:
zhang100119room_101/
Ii100220room_102/
wang100321room_103/
zhao100421room104/
輸出:
zhang100119room_101
Ii100220room_102
wang100321room_103
zhao100421room104
[例3]:具有文件拷貝功能的程序fiIecopy.c
說(shuō)明兩個(gè)問(wèn)題:命令行參數(shù)的應(yīng)用和文件的字
符輸入與輸出應(yīng)用。
功能:從指定文件讀入一個(gè)字符。
功能:把一個(gè)字符寫(xiě)到指定文件中去。
[例3]:具有文件拷貝功能的程序fiIecopy.c
#incIude<stdio.h>
#incIude<process.h>
#incIude<string.h>
filecopy(FILE*fp1,FILE*fp2){
charc;
whiIe((c=fgetc(fp1))!=EOF)
fputc(c,fp2);
voidmain(intargc,char*argv[]){
filecopy(FILE*fp1,FILE*fp2);
FILE*fp1,*fp2;
if(argc>1){
if((fp1=fopen(*++argv,〃r"))二二NULL){
printf(〃can\'tfopen%s\n',*argv);exit(0);
1
if((fp2=fopen(*++argv,"w"))二二NULL){
printf(,,can\,tfopen%s\n”,*argv);exit(0);
1
fiIecopy(fp1,fp2);
)
運(yùn)行時(shí)情況:
$vifiIecopy.c/
$ccfiIe.c-ofiIecopy/
$/
運(yùn)行時(shí)數(shù)據(jù)狀態(tài):argc
3
argv[]
argv[0]
argv[1]
argv[2]
[例4]:文件的字符串的輸入輸出處理
fgets(str,n9fp)字符串輸入函數(shù)。
,其功能是從fp指定的文件中讀取一個(gè)串,若滿(mǎn)足以
下條件讀取結(jié)束:①已讀取n-1個(gè)字符、②當(dāng)前讀取
到的字符是回車(chē)符、③已讀取到文件尾。
/讀取的字符個(gè)數(shù)至多n-1個(gè),余下的一個(gè)字節(jié)空間作
為加''0'串結(jié)束符。
/讀取回車(chē)符時(shí),也作為一個(gè)字符送入由str所指的內(nèi)
存緩沖區(qū)。然后再加一個(gè)字符串結(jié)束符'\0'
str為數(shù)組名或字符指針;n為讀取字符個(gè)數(shù)。
[例4]:文件的字符串的輸入輸出處理
字符串輸出(寫(xiě))函數(shù)
其功能是將str所指定的字符串寫(xiě)到fp指向的文件中。
與fgets。函數(shù)在輸入字符串末尾自動(dòng)加(\Of特性
對(duì)應(yīng),fputs。函數(shù)在將C字符串寫(xiě)入文件時(shí),其末尾
的‘\0’字符自動(dòng)舍去。
fputs。與puts。功能不同,fputs。舍去串結(jié)束符
而puts。把它轉(zhuǎn)換成回車(chē)符輸出。
#
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 印刷月結(jié)協(xié)議合同范本
- 合同主體變更補(bǔ)充合同范本
- 動(dòng)遷出售合同范例
- 合陽(yáng)房子出租合同范本
- 不規(guī)則車(chē)位轉(zhuǎn)讓合同范本
- 水果存儲(chǔ)合同范本
- 公寓降價(jià)出租合同范例
- 農(nóng)田承包中介合同范本
- 發(fā)廊出兌合同范本
- 商務(wù)外貿(mào)合同范本
- 《隆中對(duì)》教學(xué)講解課件
- 絕緣電阻測(cè)試儀安全操作規(guī)程
- DB6101T 197-2022 藤蔓類(lèi)尾菜堆肥技術(shù)規(guī)程
- 西藏房屋建筑工程竣工材料全套表格
- 量子力學(xué)英文課件格里菲斯Chapter4
- 鍋爐節(jié)能管理制度
- 2023年道路交通安全法實(shí)施條例
- 鹽城市殘疾人康復(fù)機(jī)構(gòu)認(rèn)定暫行辦法
- 護(hù)理不良事件管理、上報(bào)制度及流程
- 房地產(chǎn)公司各崗位職責(zé)及組織結(jié)構(gòu)圖
- 七夕節(jié)傳統(tǒng)文化習(xí)俗主題教育PPT
評(píng)論
0/150
提交評(píng)論