這篇文章將為大家詳細(xì)講解有關(guān)c語言文件有哪些讀寫操作,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對相關(guān)知識(shí)有一定的了解。
成都創(chuàng)新互聯(lián)是一家專業(yè)提供高陽企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、H5場景定制、小程序制作等業(yè)務(wù)。10年已為高陽眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。
c語言文件讀寫操作有:1、讀寫文件中字符的函數(shù),代碼為【int fgetc(FILE *stream)】;2、讀寫文件中字符串的函數(shù),代碼為【int fputs(char *string,FILE *stream)】。
c語言文件讀寫操作有:
1.文件的打開函數(shù)fopen()
文件的打開操作表示將給用戶指定的文件在內(nèi)存分配一個(gè)FILE結(jié)構(gòu)區(qū),并將該結(jié)構(gòu)的指針返回給用戶程序,以后用戶程序就可用此FILE指針來實(shí)現(xiàn)對指定文件的存取操作了。當(dāng)使用打開函數(shù)時(shí),必須給出文件名、文件操作方式(讀、寫或讀寫),
如果該文件名不存在,就意味著建立(只對寫文件而言,對讀文件則出錯(cuò)),并將文件指針指向文件開頭。若已有一個(gè)同名文件存在,則刪除該文件,若無同名文件,則建立該文件,并將文件指針指向文件開頭。
fopen(char *filename,char *type);
其中*filename
是要打開文件的文件名指針,一般用雙引號(hào)括起來的文件名表示,也可使用雙反斜杠隔開的路徑名。而*type
參數(shù)表示了對打開文件的操作方式。其可采用的操作方式如下:
含義 "r" 打開,只讀;
"w" 打開,文件指針指到頭,只寫;
"a" 打開,指向文件尾,在已存在文件中追加;
"rb" 打開一個(gè)二進(jìn)制文件,只讀;
"wb" 打開一個(gè)二進(jìn)制文件,只寫;
"ab" 打開一個(gè)二進(jìn)制文件,進(jìn)行追加 ;
"r+" 以讀/寫方式打開一個(gè)已存在的文件;
"w+" 以讀/寫方式建立一個(gè)新的文本文件 ;
"a+" 以讀/寫方式打開一個(gè)文件文件進(jìn)行追加 ;
"rb+" 以讀/寫方式打開一個(gè)二進(jìn)制文件;
"wb+" 以讀/寫方式建立一個(gè)新的二進(jìn)制文件 ;
"ab+" 以讀/寫方式打開一個(gè)二進(jìn)制文件進(jìn)行追加 ;
當(dāng)用fopen()成功的打開一個(gè)文件時(shí),該函數(shù)將返回一個(gè)FILE指針,如果文件打開失敗,將返回一個(gè)NULL指針。
2.關(guān)閉文件函數(shù)fclose()
文件操作完成后,必須要用fclose()函數(shù)進(jìn)行關(guān)閉,這是因?yàn)閷Υ蜷_的文件進(jìn)行寫入時(shí),若文件緩沖區(qū)的空間未被寫入的內(nèi)容填滿,這些內(nèi)容不會(huì)寫到打開的文件中去而丟失。只有對打開的文件進(jìn)行關(guān)閉操作時(shí),停留在文件緩沖區(qū)的內(nèi)容才能寫到該文件中去,從而使文件完整。
再者一旦關(guān)閉了文件,該文件對應(yīng)的FILE結(jié)構(gòu)將被釋放,從而使關(guān)閉的文件得到保護(hù),因?yàn)檫@時(shí)對該文件的存取操作將不會(huì)進(jìn)行。文件的關(guān)閉也意味著釋放了該文件的緩沖區(qū)。
int fclose(FILE *stream);
它表示該函數(shù)將關(guān)閉FILE指針對應(yīng)的文件,并返回一個(gè)整數(shù)值。若成功地關(guān)閉了文件,則返回一個(gè)0值,否則返回一個(gè)非0值。
#include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; int main() { FILE *fp; // 頭文件#include <stdio.h> if((fp=fopen("123.txt","w"))==NULL) { printf("file cannot open \n"); //exit(0); 頭文件#include <stdlib.h> //exit結(jié)束程序,一般0為正常推出,其它數(shù)字為異常,其對應(yīng)的錯(cuò)誤可以自己指定。 } else printf("file opened for writing \n"); if(fclose(fp)!=0) printf("file cannot be closed \n"); else printf("file is now closed \n"); return 0; }
3.文件的讀寫
(1).讀寫文件中字符的函數(shù)(一次只讀寫文件中的一個(gè)字符):
int fgetc(FILE *stream); int getchar(void); int fputc(int ch,FILE *stream); int putchar(int ch); int getc(FILE *stream); int putc(int ch,FILE *stream);
fgetc()
函數(shù)將把由流指針指向的文件中的一個(gè)字符讀出,例如: ch=fgetc(fp); 將把流指針fp指向的文件中的一個(gè)字符讀出,并賦給ch,當(dāng)執(zhí)行fgetc()函數(shù)時(shí),若當(dāng)時(shí)文件指針指到文件尾,即遇到文件結(jié)束標(biāo)志EOF(其對應(yīng)值為-1),該函數(shù)返回一個(gè)-1給ch,在程序中常用檢查該函數(shù)返回值是否為-1來判斷是否已讀到文件尾,從而決定是否繼續(xù)。
#include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; int main() { FILE *fp; char ch; if((fp=fopen("123.txt","r"))==NULL) printf("file cannot open \n"); else printf("file opened for writing \n"); while((ch=fgetc(fp))!=EOF) fputc(ch,stdout); //這里是輸出到屏幕 if(fclose(fp)!=0) printf("file cannot be closed \n"); else printf("file is now closed \n"); return 0; }
該程序以只讀方式打開123.txt文件,在執(zhí)行while循環(huán)時(shí),文件指針每循環(huán)一次后移一個(gè)字符位置。用fgetc()函數(shù)將文件指針指定的字符讀到ch變量中,然后用fputc()函數(shù)在屏幕上顯示,當(dāng)讀到文件結(jié)束標(biāo)志EOF時(shí),關(guān)閉該文件。 上面的程序用到了fputc()函數(shù),該函數(shù)將字符變量ch的值寫到流指針指定的文件中去,由于流指針用的是標(biāo)準(zhǔn)輸出(顯示器)的FILE指針stdout,故讀出的字符將在顯示器上顯示。又比如: fputc(ch,fp); 該函數(shù)執(zhí)行結(jié)構(gòu),將把ch表示的字符送到流指針fp指向的文件中去。
在TC中,putc()等價(jià)于fputc(),getc()等價(jià)于fgetc()。 putchar(c)相當(dāng)于fputc(c,stdout);getchar()相當(dāng)于fgetc(stdin)。 注意,這里使用char ch,其實(shí)是不科學(xué)的,因?yàn)樽詈笈袛嘟Y(jié)束標(biāo)志時(shí),是看ch!=EOF,而EOF的值為-1,這顯然和char是不能比較的。所以,某些使用,我們都定義成int ch
。
#include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; int main() { FILE *fp; if((fp=fopen("123.txt","a"))==NULL) printf("file cannot open \n"); else printf("file opened for writing \n"); char ch='e'; fputc(ch,fp); //輸入到文件中 if(fclose(fp)!=0) printf("file cannot be closed \n"); else printf("file is now closed \n"); return 0; }
(2).讀寫文件中字符串的函數(shù)
char *fgets(char *string,int n,FILE *stream); char *gets(char *s); int fprintf(FILE *stream,char *format,variable-list); int fputs(char *string,FILE *stream); char *puts(char *s); int fscanf(FILE *stream,char *format,variable-list);
其中fgets()函數(shù)將把由流指針指定的文件中n-1個(gè)字符,讀到由指針string指向的字符數(shù)組中去,例如: fgets(buffer,9,fp); 將把fp指向的文件中的8個(gè)字符讀到buffer內(nèi)存區(qū),buffer可以是定義的字符數(shù)組,也可以是動(dòng)態(tài)分配的內(nèi)存區(qū)。
注意,fgets()函數(shù)讀到'/n'就停止,而不管是否達(dá)到數(shù)目要求。同時(shí)在讀取字符串的最后加上'/0'。 fgets()函數(shù)執(zhí)行完以后,返回一個(gè)指向該串的指針。如果讀到文件尾或出錯(cuò),則均返回一個(gè)空指針NULL,所以長用feof()函數(shù)來測定是否到了文件尾或者是ferror()函數(shù)來測試是否出錯(cuò),
檢測是否已到文件尾,是返回真,否則返回0,其原型是int feof(FILE *stream);
例:if(feof(fp))printf("已到文件尾");
原型是int ferror(FILE *stream);
返回流最近的錯(cuò)誤代碼,可用clearerr()來清除它,clearerr()的原型是void clearerr(FILE *stream);
例:printf("%d",ferror(fp));
例如下面的程序用fgets()函數(shù)讀test.txt文件中的第一行并顯示出來:
#include "stdio.h" int main() { FILE *fp; char str[128]; if((fp=fopen("123.txt","r"))==NULL) { printf("cannot open file/n"); exit(1); } while(!feof(fp)) { if(fgets(str,128,fp)!=NULL) printf("%s",str); } fclose(fp); }
關(guān)于c語言文件有哪些讀寫操作就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
新聞標(biāo)題:c語言文件有哪些讀寫操作
標(biāo)題來源:http://muchs.cn/article26/gesecg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、網(wǎng)站維護(hù)、服務(wù)器托管、全網(wǎng)營銷推廣、App開發(fā)、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)