日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言 文件的读写

發布時間:2023/12/13 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言 文件的读写 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引入

OS操作系統

打開文件fopen()函數

讀寫模式:
r:讀取已有文件
w:文件不存在,創建文件并寫入文件.文件存在,內容清零,再寫入文件
a: 文件不存在,創建文件并寫入文件.文件存在,以追加的形式寫入文件

r+:讀寫已有文件
w+:文件不存在,創建文件并讀寫文件.文件存在,內容清零,再讀寫文件
a+:文件不存在,創建文件并讀寫文件.文件存在,以追加的形式寫文件,從頭開始讀文件

總結:
1)
r,r+已有文件
w,w+,a,a+:已有文件+創建文件
2)如果是二進制文件,要在后面加一個b
3)以w,w+模式會將文件清空

關閉文件fclose()函數

關閉成功,返回0
關閉失敗,返回EOF
總結:
1)
EOF:C標準函數庫中表示文件結束符(end of file)
在while循環中以EOF作為文件結束標志,這種以EOF作為文件結束標志的文件,必須是文本文件。
2)如果不關閉文件,我們的內容就沒有保存在文件中

寫入文件的函數

輸出流

fputc()寫入一個字符,成功:返回寫入的字符,失敗:返回EOF
fputs()寫入一個字符串,成功:返回一個非負值,失敗:EOF
fprintf()寫入一個字符串, 成功:返回寫入的字符的個數,失敗:返回負數


案例
庫變量:
FILE:一個適合存儲文件流信息的對象類型

代碼

#include<stdio.h> #include<stdlib.h> #include<string.h> //寫入文件--fputc(),fputs(),fprintf() int main() {printf("1.創建文件空指針\n");FILE *fp=NULL;printf("2.創建一個文件\n");/*d:/與平時的轉義字符\相反*/fp=fopen("d:/AAADQLearning/test_file.txt","a");//w寫入文件,存在,清零;不存在,創建//a寫入文件,存在,追加;不存在,創建printf("3.fputc寫入一個字符a\n");char rc=fputc('m',fp);//成功,返回寫入的字符,失敗,返回EOFfputc('\n',fp);printf("4.fputs寫入一個字符串\n");int rs=fputs("dq,as a result\n",fp);//成功,返回0,失敗返回EOFprintf("5.fprintf寫入一個字符串\n");int rf=fprintf(fp,"as good as\n");//成功,返回傳入的字符個數;失敗,返回負數printf("rc=%c rs=%d rf=%d\n",rc,rs,rf);//m 0 11printf("寫入完成!\n");printf("關閉文件指針\n");fclose(fp);getchar();return 0; }

讀取文件的函數

fgetc()讀取一個字符,成功,返回讀取的字符,失敗,返回EOF
fgets()讀取n-1字符串, 成功時返回字符串地址,錯誤或0讀入時返回NULL
fscanf()讀取字符串, 成功,返回正確讀入項目(items)的個數,錯誤時返回EOF
總結:
1)
fgets()讀取n-1個字符,把字符串復制給緩沖區,在末尾追加一個null
fscanf()讀取時遇到空格符會停止讀取,直接返回目前讀到的結果


案例
1)案例1

2)案例2

讀取文件代碼
代碼1

#include<stdio.h> #include<stdlib.h> #include<string.h> //讀取文件--fgetc(),fgets(),fscanf() //輸入流 int main() {//創建文件指針FILE *fp=NULL;fp=fopen("D:/AAADQLearning/test_file.txt","r+");//r:讀取已有文件r+讀寫已有文件char buff[1024];//使用緩沖區裝讀取到的字符char rc=fgetc(fp);char *rs=fgets(buff,sizeof(buff),fp);//讀取1024個字符,字符串一行一行地讀取char *temp="";int rf=fscanf(fp,temp);//fscanf()遇到換行符了,所以什么也沒讀取到就返回了strcat(buff,temp);/*fgetc()成功:返回讀取到的字符,失敗,返回EOFfgets()成功:返回讀取到的字符串(地址),失敗,返回NULLfscanf()成功,返回成功讀取的個數,失敗,返回EOF*/printf("rc=%c rs=%s rf=%d\n",rc,rs,rf);printf("讀取的內容:\nbuff=%s\n",buff);fclose(fp);//關閉文件指針printf("讀取完成!\n");getchar();return 0; }

代碼2

#include<stdio.h> #include<stdlib.h> #include<string.h> //循環讀取文件--fgetc(),fgets(),fscanf() //輸入流 int main() {//創建文件指針FILE *fp=NULL;fp=fopen("D:/AAADQLearning/test_file.txt","r+");//r:讀取已有文件r+讀寫已有文件char buff1[1024];//使用緩沖區裝讀取到的字符char buff2[1024];//使用fgets()循環一行行地讀取文件printf("fgets():\n");while(fgets(buff1,1024,fp)!=NULL)//只有這樣才行{//輸出緩沖區中的內容printf("%s",buff1);}//使用fscanf()循環一行行地讀取文件printf("fscanf():\n");//fscanf()遇到空格和換行時結束//所以fscanf(fp,"%s",buff2)!=EOF//表示遇到空格符或換行時,結束這一個循環,直接進行下一個循環,從沒有空格和換行符的地方讀取//最終輸出:沒有空格與換行,直接輸出一行很長的字符串while(fscanf(fp,"%s",buff2)!=EOF){printf("%s",buff2);}//使用fgetc()循環地讀取文件printf("fgetc():\n");//fgetc()會一個字符一個字符地輸出,最終輸出所有內容while(fgetc(fp)!=EOF){printf("%c",fgetc(fp));}fclose(fp);//關閉文件指針printf("讀取完成!\n");getchar();return 0; }

讀寫文件綜合代碼

#include<stdio.h> #include<stdlib.h> //文件--讀寫文件綜合 const int size=100; int main() {//寫文件--輸出流FILE *fpw=NULL;fpw=fopen("D:/AAADQLearning/test_write.txt","a+");//寫文件int i;for(i=0;i<100;i++){fprintf(fpw,"arr[%d]\n",i);}printf("完成寫入!\n");//讀文件--輸入流FILE*fpr=NULL;fpr=fopen("D:/AAADQLearning/test_file.txt","r+");//讀文件char buff[1024];while(fgets(buff,1024,fpr)!=NULL){//把讀取到的文件內容追加到test_write.txt文件中//輸出流fputs(buff,fpw);}printf("讀取并寫入文件完成!\n");//關閉文件指針fclose(fpr);fclose(fpw);getchar();return 0; }

補充

1.文件相關的函數使用時返回的結果

fgetc():成功時返回讀入的字節數。錯誤或文件尾時返回EOF; fputc():成功時返回寫入的字節數。錯誤時返回EOF; fgets():成功時返回字符串地址,錯誤或0讀入時返回NULL; fputs():成功時返回一個非負整數,錯誤時返回EOF fprintf():成功時返回寫入的字節數,錯誤時返回負數(negative value) fscanf():返回正確讀入項目(items)的個數,錯誤時返回EOF fwrite():返回正確寫入項目的個數,錯誤時返回0 fread():返回正確讀入項目的個數,錯誤時返回0 fseek():成功返回0,錯誤返回-1。

總結

以上是生活随笔為你收集整理的C语言 文件的读写的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。