




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
本文格式為Word版,下載可任意編輯——C語言文件操作教程C語言文件操作教程
引導(dǎo)語;C語言的應(yīng)用范圍廣泛,具備很強的數(shù)據(jù)處理才能,以下是我共享給大家的C語言文件操作教程,接待閱讀,更多精彩請持續(xù)關(guān)注我們我!
一、標(biāo)準(zhǔn)文件的讀寫
1.文件的開啟fopen
文件的開啟操作表示將給用戶指定的文件在內(nèi)存調(diào)配一個FILE布局區(qū),并將該布局的指針返回給用戶程序,以后用戶程序就可用此FILE指針來實現(xiàn)對指定文件的存取操作了。當(dāng)使用開啟函數(shù)時,務(wù)必給出文件名、文件操作方式讀、寫或讀寫,假設(shè)該文件名不存在,就意味著建立只對寫文件而言,對讀文件那么出錯,并將文件指針指向文件開頭。若已有一個同名文件存在,那么刪除該文件,若無同名文件,那么建立該文件,并將文件指針指向文件開頭。
fopenchar*filename,char*type;
其中*filename是要開啟文件的文件名指針,一般用雙引號括起來的文件名表示,也可使用雙反斜杠隔開的路徑名。而*type參數(shù)表示了對開啟文件的操作方式。其可采用的操作方式如下:
方式含義
r開啟,只讀
w開啟,文件指針指到頭,只寫
a開啟,指向文件尾,在已存在文件中追加
rb開啟一個二進制文件,只讀
wb開啟一個二進制文件,只寫
ab開啟一個二進制文件,舉行追加
r+以讀/寫方式開啟一個已存在的文件
w+以讀/寫方式建立一個新的文本文件
a+以讀/寫方式開啟一個文件文件舉行追加
rb+以讀/寫方式開啟一個二進制文件
wb+以讀/寫方式建立一個新的二進制文件
ab+以讀/寫方式開啟一個二進制文件舉行追加
當(dāng)用fopen0告成的開啟一個文件時,該函數(shù)將返回一個FILE指針,假設(shè)文件開啟失敗,將返回一個NULL指針。如想開啟test文件,舉行寫:
FILE*fp;
iffp=fopentest,w==NULL
printfFilecannotbeopened\n;
exit;
else
printfFileopenedforwriting\n;
fclosefp;
DOS操作系統(tǒng)對同時開啟的文件數(shù)目是有限制的,缺省值為5,可以通過修改CONFIG.SYS文件變更這個設(shè)置。
2.關(guān)閉文件函數(shù)fclose
文件操作完成后,務(wù)必要用fclose函數(shù)舉行關(guān)閉,這是由于對開啟的文件舉行寫入時,若文件緩沖區(qū)的空間未被寫入的內(nèi)容填滿,這些內(nèi)容不會寫到開啟的文件中去而損失。只有對開啟的文件舉行關(guān)閉操作時,停留在文件緩沖區(qū)的內(nèi)容才能寫到該文件中去,從而使文件完整。再者一旦關(guān)閉了文件,該文件對應(yīng)的FILE布局將被釋放,從而使關(guān)閉的文件得到養(yǎng)護,由于這時對該文件的存取操作將不會舉行。文件的關(guān)閉也意味著釋放了該文件的緩沖區(qū)。
intfcloseFILE*stream;
它表示該函數(shù)將關(guān)閉FILE指針對應(yīng)的文件,并返回一個整數(shù)值。若告成地關(guān)閉了文件,那么返回一個0值,否那么返回一個非0值。常用以下方法舉行測試:
iffclosefp!=0
printfFilecannotbeclosed\n;
exit1;
else
printfFileisnowclosed\n;
當(dāng)開啟多個文件舉行操作,而又要同時關(guān)閉時,可采用fcloseall函數(shù),它將關(guān)閉全體在程序中開啟的文件。
intfcloseall;
該函數(shù)將關(guān)閉全體已開啟的文件,將各文件緩沖區(qū)未裝滿的內(nèi)容寫到相應(yīng)的文件中去,接著釋放這些緩沖區(qū),并返回關(guān)閉文件的數(shù)目。如關(guān)閉了4個文件,那么當(dāng)執(zhí)行:
n=fcloseall;
時,n應(yīng)為4。
3.文件的讀寫
1.讀寫文件中字符的函數(shù)一次只讀寫文件中的一個字符:
intfgetcFILE*stream;
intfgetcharvoid;
intfputcintch,FILE*stream;
intfputcharintch;
intgetcFILE*stream;
intputcintch,FILE*stream;
其中fgetc函數(shù)將把由流指針指向的文件中的一個字符讀出,例如:
ch=fgetcfp;
將把流指針fp指向的文件中的一個字符讀出,并賦給ch,當(dāng)執(zhí)行fgetc函數(shù)時,若當(dāng)時文件指針指到文件尾,即遇到文件終止標(biāo)志EOF其對應(yīng)值為-1,該函數(shù)返回一個-1給ch,在程序中常用檢查該函數(shù)返回值是否為-1來判斷是否已讀到文件尾,從而抉擇是否持續(xù)。
#includestdio.h
main
FILE*fp;
chch;
iffp=fopenmyfile.tex,r==NULL
printffilecannotbeopened\n;
exit1;
whilech=fgetcfp!=EOFfputcch,stdout;
fclosefp;
該程序以只讀方式開啟myfile.txt文件,在執(zhí)行while循環(huán)時,文件指針每循環(huán)一次后移一個字符位置。用fgetc函數(shù)將文件指針指定的字符讀到ch變量中,然后用fputc函數(shù)在屏幕上顯示,當(dāng)讀到文件終止標(biāo)志EOF時,變關(guān)閉該文件。
上面的程序用到了fputc函數(shù),該函數(shù)將字符變量ch的值寫到流指針指定的文件中去,由于流指針用的是標(biāo)準(zhǔn)輸出顯示器的FILE指針stdout,故讀出的字符將在顯示器上顯示。又譬如:
fputcch,fp;
該函數(shù)執(zhí)行布局,將把ch表示的字符送到流指針fp指向的文件中去。
在TC中,putc等價于fput,getc等價于fgetc。
putcharc相當(dāng)于fputcc,stdout;getchar相當(dāng)于fgetcstdin。
留神,這里使用charch,其實是不科學(xué)的,由于結(jié)果判斷終止標(biāo)志時,是看ch!=EOF,而EOF的值為-1,這鮮明和char是不能對比的。所以,某些使用,我們都定義成intch。
2.讀寫文件中字符串的函數(shù)
char*fgetschar*string,intn,FILE*stream;
char*getschar*s;
intfprintfFILE*stream,char*format,variable-list;
intfputschar*string,FILE*stream;
intfscanfFILE*stream,char*format,variable-list;
其中fgets函數(shù)將把由流指針指定的文件中n-1個字符,讀到由指針stream指向的字符數(shù)組中去,例如:
fgetsbuffer,9,fp;
將把fp指向的文件中的8個字符讀到buffer內(nèi)存區(qū),buffer可以是定義的字符數(shù)組,也可以是動態(tài)調(diào)配的內(nèi)存區(qū)。
留神,fgets函數(shù)讀到\n就中斷,而不管是否達成數(shù)目要求。同時在讀取字符串的結(jié)果加上\0。
fgets函數(shù)執(zhí)行完以后,返回一個指向該串的指針。假設(shè)讀到文件尾或出錯,那么均返回一個空指針NULL,所以長用feof函數(shù)來測定是否到了文件尾或者是ferror函數(shù)來測試是否出錯,例如下面的程序用fgets函數(shù)讀test.txt文件中的第一行并顯示出來:
#includestdio.h
main
FILE*fp;
charstr[128];
iffp=fopentest.txt,r==NULL
printfcannotopenfile\n;
exit1;
while!feoffp
iffgetsstr,128,fp!=NULLprintf%s,str;
fclosefp;
gets函數(shù)執(zhí)行時,只要未遇到換行符或文件終止標(biāo)志,將一向讀下去。因此讀到什么時候為止,需要用戶舉行操縱,否那么可能造成存儲區(qū)的溢出。
fputs函數(shù)想指定文件寫入一個由string指向的字符串,\0不寫入文件。
fprintf和fscanf同printf和scanf函數(shù)類似,不同之處就是printf函數(shù)是想顯示器輸出,fprintf那么是向流指針指向的文件輸出;fscanf是從文件輸入。
C語言文件操作教程
下面程序是向文件test.dat里輸入一些字符:
#include
main
char*s=Thatsgoodnews;
inti=617;
FILE*fp;
fp=fopnetest.dat,w;/*建立一個文字文件只寫*/
fputsYourscoreofTOEFLis,fp;/*向所建文件寫入一串字符*/
fputc:,fp;/*向所建文件寫冒號:*/
fprintffp,%d\n,i;/*向所建文件寫一整型數(shù)*/
fprintffp,%s,s;/*向所建文件寫一字符串*/
fclosefp;
用DOS的TYPE命令顯示TEST.DAT的內(nèi)容如下所示:
屏幕顯示
YourscoreofTOEFLis:617
Thatsgoodnews
下面的程序是把上面的文件test.dat里的內(nèi)容在屏幕上顯示出來:
#include
main
char*s,m[20];
inti;
FILE*fp;
fp=fopentest.dat,r;/*開啟文字文件只讀*/
fgetss,24,fp;/*從文件中讀取23個字符*/
printf%s,s;
fscanffp,%d,i;/*讀取整型數(shù)*/
printf%d,i;
putcharfgetcfp;/*讀取一個字符同時輸出*/
fgetsm,17,fp;/*讀取16個字符*/
putsm;/*輸出所讀字符串*/
fclosefp;
getch;
運行后屏幕顯示:
YourscoreofTOEFLis:617
Thatsgoodnews
4.除掉和設(shè)置文件緩沖區(qū)
1.除掉文件緩沖區(qū)函數(shù):
intfflushFILE*stream;
intflushall;
fflush函數(shù)將除掉由stream指向的文件緩沖區(qū)里的內(nèi)容,常用于寫完一些數(shù)據(jù)后,立刻用該函數(shù)除掉緩沖區(qū),以免誤操作時,破壞原來的數(shù)據(jù)。
flushall將除掉全體開啟文件所對應(yīng)的文件緩沖區(qū)。
2.設(shè)置文件緩沖區(qū)函數(shù)
voidsetbufFILE*stream,char*buf;
voidsetvbufFILE*stream,char*buf,inttype,unsignedsize;
這兩個函數(shù)將使得開啟文件后,用戶可建立自己的文件緩沖區(qū),而不使用fopen函數(shù)開啟文件設(shè)定的默認(rèn)緩沖區(qū)。
對于setbuf函數(shù),buf指出的緩沖區(qū)長度由頭文件stdio.h中定義的宏BUFSIZE的值抉擇,缺省值為512字節(jié)。選中定buf為空時,setbuf函數(shù)將使的文件I/O不帶緩沖。而對setvbuf函數(shù),那么由malloc函數(shù)來調(diào)配緩沖區(qū)。參數(shù)size指領(lǐng)略緩沖區(qū)的長度務(wù)必大于0,而參數(shù)type那么表示了緩沖的類型,其值可以取如下值:
type值含義
_IOFBF文件全部緩沖,即緩沖區(qū)裝滿后,才能對文件讀寫
_IOLBF文件行緩沖,即緩沖區(qū)接收到一個換行符時,才能對文件讀寫
_IONBF文件不緩沖,此時疏忽buf,size的值,直接讀寫文件,不再經(jīng)過文件緩沖區(qū)緩沖
5.文件的隨機讀寫函數(shù)
前面介紹的文件的字符/字符串讀寫,均是舉行文件的依次讀寫,即總是從文件的開頭開頭舉行讀寫。這鮮明不能得志我們的要求,C語言供給了移動文件指針和隨機讀寫的.函數(shù),它們是:
1.移動文件指針函數(shù):
longftellFILE*stream;
intrewindFILE*stream;
fseekFILE*stream,longoffset,intorigin;
函數(shù)ftell用來得到文件指針離文件開頭的偏移量。當(dāng)返回值是-1時表示出錯。
rewind函數(shù)用于文件指針移到文件的開頭,當(dāng)移動告成時,返回0,否那么返回一個非0值。
fseek函數(shù)用于把文件指針以origin為起點移動offset個字節(jié),其中origin指出的位置可有以下幾種:
origin數(shù)值代表的概括位置
SEEK_SET0文件開頭
SEEK_CUR1文件指針當(dāng)前位置
SEEK_END2文件尾
例如:
fseekfp,10L,0;
把文件指針從文件開頭移到第10字節(jié)處,由于offset參數(shù)要求是長整型數(shù),故其數(shù)后帶L。
fseekfp,-15L,2;
把文件指針從文件尾向前移動15字節(jié)。
2.文件隨機讀寫函數(shù)
intfreadvoid*ptr,intsize,intnitems,FILE*stream;
intfwritevoid*ptr,intsize,intnitems,FILE*stream;
fread函數(shù)從流指針指定的文件中讀取nitems個數(shù)據(jù)項,每個數(shù)據(jù)項的長度為size個字節(jié),讀取的nitems數(shù)據(jù)項存入由ptr指針指向的內(nèi)存緩沖區(qū)中,在執(zhí)行fread函數(shù)時,文件指針隨著讀取的字節(jié)數(shù)而向后移動,結(jié)果移動終止的位置等于實際讀出的字節(jié)數(shù)。該函數(shù)執(zhí)行終止后,將返回實際讀出的數(shù)據(jù)項數(shù),這個數(shù)據(jù)項數(shù)不確定等于設(shè)置的nitems,由于若文件中沒有足夠的數(shù)據(jù)項,或讀中間出錯,都會導(dǎo)致返回的數(shù)據(jù)項數(shù)少于設(shè)置的nitems。當(dāng)返回數(shù)不等于nitems時,可以用feof或ferror函數(shù)舉行檢查。
fwrite函數(shù)從ptr指向的緩沖區(qū)中取出長度為size字節(jié)的nitems個數(shù)據(jù)項,寫入到流指針stream指向的文件中,執(zhí)行該操作后,文件指針將向后移動,移動的字節(jié)數(shù)等于寫入文件的字節(jié)數(shù)目。該函數(shù)操作完成后,也將返回寫入的數(shù)據(jù)項數(shù)。
二、非標(biāo)準(zhǔn)文件的讀寫
這類函數(shù)最早用于UNIX操作系統(tǒng),ANSI標(biāo)準(zhǔn)未定義,但有時也經(jīng)常用到,DOS3.0以上版本支持這些函數(shù)。它們的頭文件為io.h。
由于我們不常用這些函數(shù),所以在這里就簡樸說一下。
1.文件的開啟和關(guān)閉
open函數(shù)的作用是開啟文件,其調(diào)用格式為:
intopenchar*filename,intaccess;
該函數(shù)表示按access的要求開啟名為filename的文件,返回值為文件描述字,其中access有兩片面內(nèi)容:
根本模式和修飾符,兩者用或方式連接。修飾符可以有多個,但根本模式只能有一個。
access的規(guī)定
根本模式含義修飾符含義
O_RDONLY只讀O_APPEND文件指針指向末尾
O_WRONLY只寫O_CREA
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 茶樓承包合同
- 企業(yè)人力資源數(shù)字化轉(zhuǎn)型戰(zhàn)略規(guī)劃設(shè)計
- 2025年銀川貨運車從業(yè)資格證考試內(nèi)容
- 《Scratch初體驗》導(dǎo)學(xué)案
- 109-指揮調(diào)度系統(tǒng)
- 節(jié)溫器戰(zhàn)略市場規(guī)劃報告
- 修路材料采購合同范例
- 個人理財心得體會
- 單位施工合同范本
- 三年級聽聽秋的聲音教學(xué)反思
- 《綠色建筑設(shè)計原理》課件
- 中醫(yī)館裝修合同范本
- 學(xué)習(xí)與科技的融合主題班會
- 《直播銷售》課件-項目一 認(rèn)識直播與直播銷售
- 2025年南京科技職業(yè)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點試題含答案解析
- 2025-2030年中國航空配餐行業(yè)市場發(fā)展現(xiàn)狀及投資前景規(guī)劃研究報告
- 新課標(biāo)背景下的跨學(xué)科學(xué)習(xí)內(nèi)涵、設(shè)置邏輯與實踐原則
- 母嬰分離產(chǎn)婦的護理
- 2025年全國高考體育單招政治時事填空練習(xí)50題(含答案)
- 2025教科版一年級科學(xué)下冊教學(xué)計劃
- 人教版高一上學(xué)期數(shù)學(xué)(必修一)期末考試卷(附答案)
評論
0/150
提交評論