文件安徽電子信息職業(yè)技術(shù)學(xué)院_第1頁
文件安徽電子信息職業(yè)技術(shù)學(xué)院_第2頁
文件安徽電子信息職業(yè)技術(shù)學(xué)院_第3頁
文件安徽電子信息職業(yè)技術(shù)學(xué)院_第4頁
文件安徽電子信息職業(yè)技術(shù)學(xué)院_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第9章文件文件是存儲在外部介質(zhì)上數(shù)據(jù)的集合,是程序設(shè)計中一個重要的概念。操作系統(tǒng)以文件為單位對數(shù)據(jù)進展管理。C言語文件的輸入和輸出由庫函數(shù)來完成。1、流和文件C言語I/O系統(tǒng)在編程者和運用設(shè)備之間提供了一層籠統(tǒng)的東西。這個籠統(tǒng)的東西就叫做“流〞。詳細的實踐設(shè)備叫做“文件〞C言語把文件看作是一個字符的序列,即由一個個字符的數(shù)據(jù)流組成,一個文件是一個字符流。在C言語中對文件的存取是以字符為單位的,這種文件稱為流式文件。C言語提供了兩種類型的流:文本流和二進制流。一個文本流是一行行的字符,換行符表示這一行的終了。在一個文件流中某些字符的變換由環(huán)境工具的需求來決議。一個二進制流是由與外圍設(shè)備中的內(nèi)容一一對應(yīng)的系列字節(jié)組成的。運用中沒有字符翻譯過程,而且所讀寫的字節(jié)數(shù)目也與外設(shè)中的數(shù)目一樣。用一個翻開操作使流和一個特定的文件建立聯(lián)絡(luò)。一旦一個文件被翻開,程序就可以與該文件交換信息。封鎖操作使文件脫離一個特定的流。對于一個翻開的輸出流,封鎖時那么將與這個流有關(guān)的緩沖區(qū)的內(nèi)容寫入到外圍設(shè)備上。每一個與文件相結(jié)合的流都有一個FILE型文件控制構(gòu)造,這個構(gòu)造在頭文件stdio.h中有定義。2、規(guī)范設(shè)備文件在一個程序開場執(zhí)行時,三個預(yù)定義的文本流stdin,stdout和stderr就被翻開。它們是與系統(tǒng)相銜接的規(guī)范輸入輸出設(shè)備。其中:stdin指規(guī)范輸入設(shè)備,即鍵盤;stdout指規(guī)范輸出設(shè)備,即終端顯示器;stderr是規(guī)范出錯輸出設(shè)備,普通是終端顯示器。9.1文件類型指針文件構(gòu)造指針是一個指向文件有關(guān)信息的指針。這些信息定義了文件的文件名、形狀和當(dāng)前位置。在概念上文件構(gòu)造指針標(biāo)志著一個指定的磁盤文件。文件構(gòu)造指針是一個FILE型指針變量,在頭文件stdio.h中已定義如下:typedefstruct{shortlevel;unsignedflags;charfd;unsignedcharhold;shortbsize;unsignedchar*buffer;unsignedchar*curp;unsignedistemp;shorttoken;}FILE;例如定義一個文件型指針變量:FILE*fp;闡明:fp就是一個指向FILE類型構(gòu)造的指針變量,經(jīng)過該文件指針變量就可以找到它相關(guān)聯(lián)的文件,從而對文件進展讀寫操作。9.2文件的翻開與封鎖C言語規(guī)定對文件進展讀寫操作之前應(yīng)該首先翻開該文件,在操作終了之后應(yīng)封鎖該文件。1.文件的翻開fopen()函數(shù)fopen()函數(shù)翻開一個流并把一個文件與這個流銜接,fopen()函數(shù)的調(diào)用方式為:FILE*fp;fp=fopen(filename,mode);其中:filename必需是一個字符串組成的有效文件名;mode是闡明文件翻開方式的字符串,在TurboC中,有效的mode值如下表所示;fopen()函數(shù)假設(shè)勝利地翻開所指定的文件,那么前往指向新翻開文件的指針,且假想的文件位置指針指向文件首部;假設(shè)未能翻開文件,那么前往一個空指針。

文件操作方式

含義

指定文件不存在時

指定文件存在時“r”只讀打開一個文本文件只讀出錯正常打開“w”只寫生成一個文本文件只寫建立新文件原文件內(nèi)容丟失“a”追加對一個文本文件添加建立新文件原文件尾部追加數(shù)據(jù)“rb”打開一個二進制文件只讀出錯正常打開“wb”生成一個二進制文件只寫建立新文件原文件內(nèi)容丟失“ab”對一個二進制文件添加建立新文件原文件尾部追加數(shù)據(jù)“r+”打開一個文本文件讀/寫出錯正常打開“w+”生成一個文本文件讀/寫建立新文件原文件內(nèi)容丟失“a+”打開或生成一個文本文件讀/寫建立新文件原文件尾部追加數(shù)據(jù)“rb+”打開一個二進制文件讀/寫出錯正常打開“wb+”生成一個二進制文件讀/寫建立新文件原文件內(nèi)容丟失ab+”打開或生成一個二進制文件讀/寫建立新文件原文件尾部追加數(shù)據(jù)【例1】翻開一個名為test.txt文件并預(yù)備寫操作。fp=fopen(“test.txt〞,“w〞);if((fp=fopen(“test〞,“w〞))==NULL){puts(“不能翻開此文件\n〞); exit(1);}留意:NULL是stdio.h中定義的一個宏闡明:在翻開一個文件作為讀操作時,該文件必需存在;假設(shè)文件不存在,那么前往一個出錯信息。以讀操作“r〞或“rb〞方式翻開一個文件,只能對該文件進展讀出而不能對該文件進展寫入。用“w〞或“wb〞翻開一個文件預(yù)備寫操作時,假設(shè)該文件存在的話,那么文件中原有的內(nèi)容將被全部抹掉,并開場存放新內(nèi)容;假設(shè)文件不存在,那么建立這個文件。以寫操作“w〞或“wb〞方式翻開一個文件,只能對該文件進展寫入而不能對該文件進展讀出。在“a〞、“ab〞、“a+〞、“ab+〞方式翻開一個文件,要在文件的尾部再加寫些內(nèi)容,那么在翻開文件時,假設(shè)該文件存在,那么文件中原有的內(nèi)容不會被抹掉,文件位置指針指向文件末尾;假設(shè)該文件不存在,就建立這個文件。以“r+〞或“rb+〞方式翻開一個文件進展讀寫操作時,該文件必需存在,假設(shè)文件不存在,那么前往一個出錯信息。以“w+〞或“wb+〞方式翻開一個文件進展讀寫操作時,假設(shè)該文件存在,那么文件中原有的內(nèi)容將被抹掉;假設(shè)該文件不存在,就建立這個文件。2.fclose()函數(shù)fclose()函數(shù)用來封鎖一個已由fopen()函數(shù)翻開的流,fclose()函數(shù)的調(diào)用方式為:fclose(fp);

其中:fp是一個調(diào)用fopen()時前往的文件指針。假設(shè)封鎖文件勝利,那么fclose()函數(shù)前往值為0;假設(shè)fclose()函數(shù)的前往值不為0,那么闡明出錯。。9.3文件的讀寫操作1.fputc()、fgetc()和feof()函數(shù)fputc()函數(shù)的調(diào)用方式為:fputc(ch,fp);功能:用來向一個已由fopen()函數(shù)翻開的寫操作流中寫一個字符。假設(shè)fputc()操作勝利,那么前往值是輸出的字符;假設(shè)操作失敗,那么前往EOF〔文件終了〕。fgetc()函數(shù)的調(diào)用方式為:fgetc(fp);功能:fgetc()函數(shù)用來從一個已由fopen()函數(shù)翻開的讀操作流中讀取一個字符。fgetc()前往文件指針?biāo)肝募挟?dāng)前位置上字符。當(dāng)讀到文件尾時,fgetc()前往一個EOF文件終了標(biāo)志。feof()函數(shù)feof()函數(shù)的調(diào)用方式為:feof(fp);feof()函數(shù)將前往一個整型值,在到達文件終了點時其值為1,未到達文件終了點時其值為0。2.getw()函數(shù)和putw()函數(shù)getw()函數(shù)和putw()函數(shù)用于從磁盤文件中讀或?qū)懸粋€整型數(shù)據(jù)〔一個字〕。3.fgets()函數(shù)和fputs()函數(shù)fgets()函數(shù)和fputs()函數(shù)用來讀寫字符串的。調(diào)用方式為:fgets(str,length,fp);和fputs(str,fp);4.fread()函數(shù)和fwrite()函數(shù)調(diào)用方式為:fread(buffer,num_bytes,count,fp);fwrite(buffer,num_bytes,count,fp);其中:buffer是一個指針;讀寫的字節(jié)數(shù)用num_bytes來表示;參數(shù)count指示共有多少個字段要被讀寫;fp是一個有效的文件指針。5.fprintf()函數(shù)和fscanf()函數(shù)調(diào)用方式為:fprintf(fp,“控制字符串〞,參數(shù)表);fscanf(fp,“控制字符串〞,參數(shù)表);其中:fp是一個有效的文件指針,控制字符串和參數(shù)表同printf()和scanf()函數(shù)。fprintf()函數(shù)操作勝利,前往實踐被寫的字符個數(shù);不勝利前往一個負數(shù)。fscanf()函數(shù)操作勝利,前往實踐被賦值的參數(shù)個數(shù);假設(shè)前往EOF,那么表示試圖去讀取超越文件末尾的部分。9.4文件定位與出錯檢測1、文件定位fseek()函數(shù)調(diào)用方式為:fseek(fp,num_bytes,origin);功能:fseek()函數(shù)可以完成隨機讀寫操作,可以隨機設(shè)置文件位置指針。fseek()函數(shù)操作勝利,前往0,前往非零值表示失敗。其中,origin是下表中所示的幾個宏名之一:宏名字數(shù)值表示origin(起點)SEEK_SET0文件開始為起點SEEK_CUR1文件當(dāng)前位置為起點SEEK_END2文件末尾為起點2、出錯檢測ferror()函數(shù)ferror()函數(shù)用來確定文件操作中能否出錯。調(diào)用方式為:ferror(fp);其中:fp是一個調(diào)用fopen()時前往的文件指針。假設(shè)在文件操作中發(fā)生了錯誤,那么ferror()函數(shù)前往一個非零值,即“真〞;否那么前往值為0,即“假〞。9.5其他文件函數(shù)1、rewind()函數(shù)rewind()函數(shù)用來將文件位置指針重新設(shè)置到該文件首。其調(diào)用方式是:rewine(fp);

2、ftell()函數(shù)ftell()函數(shù)的作用是得到流式文件中位置指針的當(dāng)前位置,用相對于文件開頭的位移量來表示。3、

clearerr()函數(shù)clearer()函數(shù)的作用是使文件錯誤標(biāo)志和文件終了標(biāo)志置為0。其調(diào)用方式是:clearerr(fp);

4、remove()函數(shù)remove()函數(shù)刪除所指定的文件,其調(diào)用方式為:remove(filename);字符串filename是指定要刪除的文件名。該函數(shù)正確執(zhí)行終了前往0,否那么前往非零值。其調(diào)用方式是:

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論