版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、文件操作文件輸入/輸出C 語言的 I/O 操作使用標(biāo)準(zhǔn)庫中的函數(shù)來實(shí)現(xiàn)文件輸入和輸出的數(shù)據(jù)可以用內(nèi)部的二進(jìn)制表示法傳輸文件輸入和輸出的數(shù)據(jù)也可以按文本格式傳輸文本流文本流是一系列字符,可以由許多行構(gòu)成,每行由一個(gè)換行符終止在文本流中,可以根據(jù)情況需要對(duì)某些字符進(jìn)行轉(zhuǎn)換寫(或讀)的字符與外部設(shè)備上的字符可能不是一對(duì)一的關(guān)系同樣,由于可能發(fā)生轉(zhuǎn)換,寫(或讀)的字符數(shù)可能與外部設(shè)備上的字符數(shù)不同二進(jìn)制流二進(jìn)制流是一系列字節(jié),并與外部設(shè)備上的字節(jié)一一對(duì)應(yīng)寫(或讀)的字節(jié)數(shù)與外部設(shè)備上的字節(jié)數(shù)一樣文件流是一系列獨(dú)立的字節(jié),沒有任何標(biāo)記用來指明文件的結(jié)束或記錄的結(jié)束文件的結(jié)束是由文件大小來決定的文件文件可
2、以指任何設(shè)備,如磁盤文件、終端以及打印機(jī) 通過執(zhí)行打開操作,文件可以與流進(jìn)行關(guān)聯(lián);通過執(zhí)行關(guān)閉操作,可以斷開關(guān)聯(lián)如果一個(gè)程序正常終止,所有文件都會(huì)自動(dòng)關(guān)閉一旦程序崩潰,文件會(huì)保持打開狀態(tài)基本的文件函數(shù)函數(shù)名功能fopen( ) 打開文件fclose( ) 關(guān)閉文件fputc( )將字符寫入文件中fgetc( ) 從文件中讀取字符fread() 將數(shù)據(jù)從文件中讀到緩沖區(qū)fwrite() 將數(shù)據(jù)從緩沖區(qū)寫入文件fseek( ) 在文件中搜索指定位置fprintf( ) 操作類似于 printf(),但是用于文件fscanf( ) 操作類似于 scanf(),但是用于文件feof( ) 如果到達(dá)文件
3、結(jié)尾,返回 trueferror( ) 如果出錯(cuò),返回 truerewind( ) 將文件位置指示器重新置于文件開頭remove( ) 刪除文件fflush( ) 將內(nèi)部緩沖區(qū)的數(shù)據(jù)寫入指定文件文件指針文件指針是讀寫文件必需的文件指針指向一個(gè)結(jié)構(gòu),該結(jié)構(gòu)包含以下信息:文件名、文件的當(dāng)前位置、文件是否正在讀或?qū)?、是否出錯(cuò)或是否到達(dá)文件末尾stdio.h 中定義了一個(gè)稱為 FILE 的文件結(jié)構(gòu)文件指針?biāo)璧奈ㄒ宦暶鳛椋篎ILE *fp ;打開文本文件fopen() 函數(shù)打開一個(gè)流,并將其與一個(gè)文件關(guān)聯(lián)起來fopen() 函數(shù)返回與該文件關(guān)聯(lián)的文件指針fopen() 函數(shù)的原型為: FILE *fo
4、pen(const char *filename, const char *mode); 不以文件名后綴識(shí)別文件,即可以不以.txt為后綴例如:FILE *fp;if(fp=fopen(“c:a.txt”,”r”)=NULL)printf(“Cannot open filen”);模式含義r 打開文本文件進(jìn)行讀操作w 創(chuàng)建文本文件進(jìn)行寫操作a 向文本文件追加數(shù)據(jù)r+ 打開文本文件進(jìn)行讀/寫操作(如果文件不存在,則打開失?。﹚+ 創(chuàng)建文本文件進(jìn)行讀/寫操作(如果之前的存在則清空之前的)a+f 追加或創(chuàng)建文本文件進(jìn)行讀/寫操作關(guān)閉文本文件ANSI C規(guī)定最多同時(shí)打開8個(gè)文件關(guān)閉文件可以釋放系統(tǒng)資源
5、,并且能降低超出允許打開的文件個(gè)數(shù)的風(fēng)險(xiǎn)關(guān)閉流的同時(shí)也將清除所有相應(yīng)的緩沖區(qū)fclose() 函數(shù)關(guān)閉通過調(diào)用 fopen() 而打開的流,若成功關(guān)閉文件,則返回整數(shù)值0。fclose() 函數(shù)的原型為: int fclose(FILE *fp); fcloseall() 函數(shù)用于關(guān)閉所有打開的流,若檢測(cè)到任何錯(cuò)誤則返回EOF(實(shí)際是一個(gè)字符)。注意:如果是在while(1)中給文件寫入東西,然后寫到一半直接關(guān)閉控制臺(tái)以退出程序,則東西可能還在緩沖中沒寫入文件。向文本文件中寫入字符流可以將逐個(gè)字符或?qū)⒁粋€(gè)字符串寫入文件中fputc() 用于將字符寫入前面由 fopen() 打開的文件,若返回E
6、OF表示寫入錯(cuò)誤。fputc()函數(shù)的原型為:int fputc(int ch, FILE *fp); 例如:char ch;ch=getchar();if(fputc(ch,fp)=EOF)printf(“Write Errorn”);從文本文件中讀取字符fgetc() 函數(shù)用于從使用 fopen() 以讀模式打開的文件中讀取字符fgetc() 函數(shù)的原型為:int fgetc(FILE *fp); fgetc() 函數(shù)從輸入流中當(dāng)前位置返回下一個(gè)字符,并增加文件位置指示器.若fgetc()返回EOF,則表示達(dá)到文件末尾。例如:ch=fgetc(fp);/從文件中讀取字符fgetc和fput
7、c 練習(xí): 讀入文件c1.txt,在屏幕上輸出。 讀入文件c1.txt,在屏幕上輸出。答案(1fputc.c):#include main() FILE *fp; char ch; if(fp=fopen(“d:jrzhexamplec1.txt”,“r+”)=NULL) /w+則是創(chuàng)建,會(huì)把之前的清空 printf(nCannot open file strike any key exit!); getch(); exit(1); ch=fgetc(fp); while(ch!=EOF) putchar(ch); ch=fgetc(fp); fclose(fp); 字符串 l/O函數(shù) fpu
8、ts() 用于向磁盤文件寫入字符串,fgets() 用于從磁盤文件讀取字符串fputs() 函數(shù)將整個(gè)字符串寫入指定的流中fgets() 函數(shù)從指定的流中讀取一個(gè)字符串,直到讀到一個(gè)換行符或已經(jīng)讀了字符串長(zhǎng)度減 1(length-1)個(gè)字符其原型為: int fputs(const char *str, FILE *fp); 返回EOF表示寫入錯(cuò)誤 char *fgets( char *str, int length, FILE *fp); 返回的地址實(shí)際上就是str;返回NULL表示讀取錯(cuò)誤見示例。 fputs fgets 例子1:從 鍵盤輸入一行字符,寫入一個(gè)文件,再把該文件內(nèi)容讀出顯示在
9、屏幕上(2fputs.c)。 #include main() FILE *fp; char ch,st20; char st220; if(fp=fopen(a.txt,w+)=NULL) printf(Cannot open file strike any key exit!); getch(); exit(1); printf(input a string:n); scanf(%s,st); fputs(st,fp); rewind(fp); /方法一,逐個(gè)讀ch=fgetc(fp); while(ch!=EOF) putchar(ch); ch=fgetc(fp); printf(n);
10、 /方法二,讀字符串rewind(fp); fgets(st2,4,fp);printf(%s,st2);printf(n); fclose(fp); 打開二進(jìn)制文件fopen() 函數(shù)打開一個(gè)流,并將其與一個(gè)文件關(guān)聯(lián)起來fopen() 函數(shù)返回與該文件關(guān)聯(lián)的文件指針fopen() 函數(shù)的原型為:FILE *fopen(const char *filename, const char *mode); 例如:FILE *fp;if(fp=fopen(“c:a.txt”,”rb”)=NULL)printf(“Cannot open filen”);模式含義rb 打開二進(jìn)制文件進(jìn)行讀操作wb 創(chuàng)建二
11、進(jìn)制文件進(jìn)行寫操作ab 向二進(jìn)制文件追加數(shù)據(jù)r+b 打開二進(jìn)制文件進(jìn)行讀/寫操作w+b 創(chuàng)建二進(jìn)制文件進(jìn)行讀/寫操作a+b 追加二進(jìn)制文件進(jìn)行讀/寫操作關(guān)閉二進(jìn)制文件fclose() 函數(shù)關(guān)閉通過調(diào)用 fopen() 而打開的流fclose() 的原型為: int fclose(FILE *fp); fread() 和 fwrite()函數(shù)函數(shù) fread() 和 fwrite() 稱為無格式讀或?qū)懞瘮?shù)它們用于從文件讀取和向文件寫入整塊的數(shù)據(jù)最有價(jià)值的一個(gè)應(yīng)用就是讀寫用戶定義的數(shù)據(jù)類型,尤其是結(jié)構(gòu)體這兩個(gè)函數(shù)的原型為:size_t fread(void *buffer, size_t num_
12、bytes, size_t count, FILE *fp); size_t fwrite(const void *buffer, size_t num_bytes, size_t count, FILE *fp); 其中size_t是ANSI C附加類型,是無符號(hào)整數(shù)。函數(shù)fread ()返回值是讀取對(duì)象的數(shù)目,若返回0表示到達(dá)文件結(jié)尾或出現(xiàn)錯(cuò)誤。函數(shù)fwrite ()返回寫入文件的對(duì)象數(shù)目,若該值小于count,說明有錯(cuò)誤。fread() 和 fwrite()函數(shù)例子: double d8 = 3,54;double d28;fwrite(d,sizeof(double),2,fp);re
13、wind(fp);fread(d2,sizeof(double),1,fp);結(jié)構(gòu)體寫入文件:struct stuint rollno; char name20;int age; studSIZE;fwrite(stud,sizeof(struct stu),SIZE,fp);見:Example2.cpp,fwriteStudentFile.cppfread 和 fwrite例子:從鍵盤輸入兩個(gè)學(xué)生數(shù)據(jù),寫入一個(gè)文件中,再讀出這兩個(gè)學(xué)生的數(shù)據(jù)顯示在屏幕上(3fread.c)。 #include struct stu char name10; int num; int age; char add
14、r15; boya2,boyb2,*pp,*qq; main() FILE *fp; char ch; int i; pp=boya; qq=boyb; if(fp=fopen(d:jrzhexamplestu_list,wb+)=NULL) printf(Cannot open file strike any key exit!); getch(); exit(1); printf(ninput datan); for(i=0;iname,&pp-num,&pp-age,pp-addr); pp=boya; fwrite(pp,sizeof(struct stu),2,fp); rewind
15、(fp); fread(qq,sizeof(struct stu),2,fp); printf(nnnametnumber age addrn); for(i=0;iname,qq-num,qq-age,qq-addr); fclose(fp); 使用 feof()如果到達(dá)文件末尾,函數(shù) feof() 返回 true,否則將返回 false(0)在讀取二進(jìn)制數(shù)據(jù)時(shí)使用該函數(shù)其原型為: int feof (FILE *fp); 例如:while(!feof(fp) (使用feof()要注意,如果文件指針后面沒數(shù)字了的話,它認(rèn)為文件指針?biāo)傅南乱粋€(gè)位置才是文件的末尾,并把前一個(gè)數(shù)字返回,所以最后一
16、個(gè)數(shù)字會(huì)被讀2次)rewind() 函數(shù)rewind() 函數(shù)將文件位置指示器置于文件開頭它將文件指針作為自己的參數(shù)當(dāng)文件以讀寫方式打開時(shí),即可以讀也可以寫。語法: rewind(fp ); ferror() 函數(shù)ferror() 函數(shù)用以判斷文件操作是否出錯(cuò)由于每個(gè)操作都設(shè)置了出錯(cuò)條件,所以應(yīng)在每個(gè)操作后立即調(diào)用 ferror() ,否則可能會(huì)遺漏錯(cuò)誤其原型為:int ferror(FILE *fp); 若返回值為True,則表示操作時(shí)出錯(cuò)。刪除文件(4remove.c)remove() 函數(shù)用于刪除指定文件。其原型為: int remove(char *filename); 若刪除成功則返
17、回0,否則返回非0值。例如:if(remove(“testString”)printf(“刪除失敗!n”);當(dāng)前活動(dòng)指針(4remove.c)FILE 結(jié)構(gòu)提供了一個(gè)指針,用以跟蹤發(fā)生 I/O 操作的位置每當(dāng)從流中讀取或?qū)懭胍粋€(gè)字符,當(dāng)前活動(dòng)指針(即 curp)就會(huì)向前移動(dòng)當(dāng)前活動(dòng)指針的當(dāng)前位置可以借助 ftell() 函數(shù)來獲得,返回相對(duì)于文件開頭的位置。其原型為: long int ftell(FILE *fp); 設(shè)置當(dāng)前位置 2-1 (4remove.c)fseek() 函數(shù)通過指定相對(duì)于開始位置、當(dāng)前位置或流的末尾位置的字節(jié)數(shù)來重定位 curp,這取決于 fseek() 函數(shù)中指定的
18、位置其原型為: int fseek (FILE *fp, long int offset, int origin); origin 表示搜索的起始位置,有以下幾個(gè)值:Origin 文件位置SEEK_SET 或 0文件開始SEEK_CUR 或 1當(dāng)前文件指針的位置SEEK_END 或 2文件末尾fprintf() 和 fscanf() 2-1緩沖 I/O 系統(tǒng)還包括 fprintf() 和 fscanf() 函數(shù)。寫入數(shù)據(jù)到文件在這里使用的是函數(shù)fprintf(),格式:fprintf(文件指針,格式符,輸出表列);例如:fprintf(fp,%d,rollno);而從文件讀取數(shù)據(jù)輸入到計(jì)算機(jī)使
19、用的是fscanf()fscanf(文件指針,格式符,輸入表列);例如:fscanf(fp,%d%s%d,&rollno,name,&age);fprintf() 和 fscanf() 2-2盡管 fprintf() 和 fscanf() 是最容易的方法,但它們的效率并不總是最高的就速度或文件大小而言,fread() 和 fwrite() 是較好的選擇fprintf() 和 fscanf() 例子 fprintf.c#include main() FILE *fp; char ch = a,ch2; int i = 3,i2; char s10 ;if(fp=fopen(su,w+)=NULL) printf(Cannot open file strike any key exit!); getch(); exit(1); fprintf( fp, %s%c, hello, ch );fprintf( fp, %dn, i );rewi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《電磁學(xué)電磁場(chǎng)》課件
- 《奧美品牌管理價(jià)值》課件
- 2024屆山西省大同市云州區(qū)高三上學(xué)期期末考試歷史試題(解析版)
- 單位管理制度集合大全人力資源管理十篇
- 單位管理制度集粹匯編【職員管理】十篇
- 單位管理制度匯編大合集【職員管理篇】
- 單位管理制度合并匯編【人力資源管理篇】
- 單位管理制度范例匯編人力資源管理篇
- 單位管理制度呈現(xiàn)匯編員工管理篇
- 單位管理制度呈現(xiàn)大全人力資源管理篇十篇
- 2024屆湖南省長(zhǎng)沙市高三新高考適應(yīng)性考試生物試題(含答案解析)
- 少數(shù)民族介紹水族
- 2024年四川省普通高中學(xué)業(yè)水平考試(思想政治樣題)
- 精液的常規(guī)檢測(cè)課件
- 《青紗帳-甘蔗林》 課件 2024年高教版(2023)中職語文基礎(chǔ)模塊下冊(cè)
- 數(shù)字化課程課件
- 碳纖維氣瓶制作流程介紹課件
- 2024信息安全意識(shí)培訓(xùn)ppt課件完整版含內(nèi)容
- 沙金可行性開采方案
- 蘇州市2023-2024學(xué)年高二上學(xué)期期末考試英語試卷(含答案)
- 六年級(jí)上冊(cè)必讀書目《童年》閱讀測(cè)試題(附答案)
評(píng)論
0/150
提交評(píng)論