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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

c文件操作

發布時間:2024/1/23 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c文件操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文件操作有以下幾個內容:

? 1.將數據從內存輸出到文件上,也稱“寫”文件。

? 2.將數據從文件輸入到內存,也稱“讀”文件。

一.怎樣進行文件操作:

? 1.設立文件指針

???? 進行文件操作時,必須在程序一開始就先定義文件指針。
????????
???? FILE *指針類型變量
? 2.打開文件

???? 將文件指針與磁盤上的文件建立聯系,以后對文件的所有操作都將通過文件指針來進行
??
????????? fopen(文件名, 使用文件方式)

????????? 比如: fp = fopen("A.TXT","r");

????? 其中A.TXT表示將要訪問的是當前盤當前路徑下名為A.TXT的文件。
?????
????? fopen()函數調用成功,表示在指定的磁盤位置找到文件A.TXT,這時將帶回指向A.TXT文件的指針并賦給?fp,這樣fp就和文件A.TXT建立了聯系。
????
????? 如果文件打開不成功,fopen()函數將返回一個空指針NULL,為了避免使用空指針,應該按下面的程序段?的書寫形式輸出失敗信息:
??if( fp=fopen("A.TXT","r") == NULL)
???? {
???????? printf("can't find this file!/n");
???exit(0);
???? }
??
-------------------------------------------------------------------------------------------------
??
文件使用方式??? 含義

"r"(只讀)?????? 為輸入打開一個文本文件。若指定的文件不存在,則會出錯

"w"(只寫)?????? 為輸出打開一個文本文件。若文件不存在,系統將用指定名建立一個新文件;若文件已經存????????? ??在,則將從起始位置重新寫,原有內容被更新

"rb"(只讀)????? 為輸入打開一個二進制文件。功能與"r"相同

"wb"(只寫)????? 為輸出打開一個二進制文件。功能與"w"相同

"a"(追加)?????? 為追加數據打開一個文本文件。若文件不存在,系統將用指定名建立一個新文件;若文件已??經存在,則新數據寫在原有內容之后

"ab"(追加)????? 為追加數據打開一個二進制文件。其余功能與"a"相同

"r+"(讀寫)????? 為讀/寫打開一個已存在文本文件。既可讀,也可寫,讀寫總是從文件的起始位置開始;更換??讀寫操作時不必關閉文件

"rb+"(讀寫)???? 為讀/寫打開一個已存在的二進制文件。功能與"r+"相同。可由位置函數設置讀寫的起始位置

"w+"(讀寫)????? 為讀/寫建立一個新的文本文件。若文件已存在,原有內容將被更新

"wb+"(讀寫)???? 為讀/寫建立一個新的二進制文件。功能與"w+"相同;可由位置函數設置讀寫起始位置

"a+"(讀寫)????? 為讀/寫打開一個文本文件。功能與"a"相同,只是在文件尾部添加新數據后,可以從頭開始??讀

"ab+"(讀寫)???? 為讀/寫打開一個二進制文件。功能與"a+"相同,只是在文件尾部添加新數據之后,可由位置??函數設置開始讀的起始位置

-------------------------------------------------------------------------------------------------

二.讀、寫數據:

? 讀寫數據將通過調用標準輸入輸出函數來完成。這些函數主要包括:
? (1)fgetc()和getc():從制定文件中一次讀取一個字符
?????? fputc()和putc():一次輸出一個字符到指定文件?
? (2)fgets():從指定文件中一次讀取一個字符串
?????? fputs():一次輸出一個字符串到指定文件
? (3)fread():從指定文件中一次讀取一個數據塊
?????? fwrite():一次輸出一個數據塊到指定文件
? (4)fscanf():從指定文件中按格式讀取數據
?????? fprintf():按指定格式將數據輸出到指定文件中

? 文件定位函數,使“讀寫位置指針”直接指向指定的讀寫位置:
? fseek():可移動位置指針到指定位置上
? ftell():可獲得當前位置指針的位置
? rewind():“反繞”函數,可使位置指針回到文件的開頭

三.關閉文件

?? 當 讀、寫操作完成之后,必須先將先將文件關閉

?????? fclose(文件指針)

?? 函數調用成功后返回0,否則返回非0值

---------------------------------------------------------------------------------------------------------------------------------------------

怎樣向文本文件寫入單個字符:

#include <stdio.h> main() {FILE *fpc; //定義文件指針char ch;if( (fpc = fopen("A1.TXT","w")) == NULL ) //文件打開不成功就退出程序的執行{printf("can't open this file!!/n");exit(0);}ch = getchar();while( ch != '@'){fputc(ch, fpc);ch = getchar();}fclose(fpc); }

上例表達式fopen("A1.TXT","w")是:? 為“只寫”而打開一個名為"A1.TXT"的文本文件,程序執行后,如果當前目錄下沒有名字為A1.TXT的文件,系統將在該目錄下新建;如果已經存在,則從文件的其始位置重新寫,文件中所有原有內容全部更新。

----------------------------------------------------------------------------------------------------------------------------------------------

5.向文本文件寫入字符串

#include <stdio.h> main() {FILE *fps;char str[8];if( (fps=fopen("A2.TXT","a")) == NULL){printf("can't open this file!/n");exit(0); }while( strlen( gets(str)>0 ){fputs(str,fps);fputs("/n",fps);}fclose(fps);printf("/n"); }

----------------------------------------------------------------------------------------------------------------------------------------------

4.從文本文件中讀取單個字符

#include <stdio.h> main() {FILE *fpc;char ch;if( (fpc=fopen("A1.TXT","r")) == NULL){printf("can't open this file!/n");exit(0);}ch = fgetc(fpc);while( ch!=EOF){putchar(ch);ch = fgetc(fpc);}fclose(fpc);putchar("/n"); }

----------------------------------------------------------------------------------------------------------------------------------------------

文件函數
函數名 ?? 函數原型說明????? 功能????????????????? 返回值
---------------------------------------------------------------------------------------------
fopen?? FILE? *fopen(char???????? 以mode指定的方式打開名??成功返回文件指針(文件
????????? *filename,??????????????? 為filename的文件???信息區的其始地址),否則
????????? char *mode);???????返回NULL

例:


---------------------------------------------------------------------------------------------
fclose??? int fcolse(FILE? *fp);??? 關閉fp所指的文件,釋放文件緩沖區??? 出錯返回非0,否則返回0

例:

----------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------

格式化寫文件

#include <stdio.h> void num(FILE *); main() {FILE *fp;char *fname;fname = "NUM.TXT";if( (fp = fopen(fname,"w")) == NULL ){printf("Can't open this file ! /n");exit(0);}num(fp);fclose(fp); }void num(FILE *fp) {char name[20];int num;scanf("%s%d",name,&num);while(nu>o){fprintf( fp, "%s %d/n", name, num);scanf("%s%d",name,&num);}}

----------------------------------------------------------------------------------------------------------------------------------------------

格式化讀文件

#include <stdio.h> void num(FILE *); main() {FILE *fp;char *fname;fname = "NUM.TXT"if( (fp = fopen(fname,"r")) == NULL ){prinf("can't open this file ! /n");exit(0);}num(fp);fclose(fp); }void num(FILE *f) {char name[20];int nu;fscanf(f,"%s%d",name,&nu);while(!feof(f)){printf("%s %d/n", name, nu); fscanf(f,"%s%d",name,&d);} }

----------------------------------------------------------------------------------------------------------------------------------------------

文件的數據塊讀寫方式
按數據塊方式對一個二進制文件進行讀寫操作的例子:
/*文件的數據塊讀寫
by searcher
2002-9-12 */

#include <string.h> #include <stdio.h> struct student {char name[20];int num;char sex;struct{int year;int month;int day;}birthday;float cj[3]; };main() {struct student pes[3] = {{"wanghai",1015,'M',1985,2,22,80,95,60.5},{"haixin",1017,'F',1984,1,2,57,60,78},{"lili",1019,'F',1984,3,2,77.0,90,77.5}};int i;FILE *fpr;struct student b;fpr = fopen("W.DAT","wb+");for(i=0;i<3;i++)fwrite(pes+i,sizeof(struct student),1,fpr);fseek(fpr,0L,SEEK_SET);for(i=0;i<3;i++){fread(&b,sizeof(struct student),1,fpr);printf("%7s ",b.name);printf("%c ",b.sex);printf("%d %d %2d",b.birthday.year,b.birthday.month,b.birthday.day);printf("%5.1f %5.1f %5.1f",b.cj[0],b.cj[1],b.cj[2]);printf("/n");}getchar();fclose(fpr);}//fwrite()和fread()一般用于二進制文件 //fread(&b,sizeof(struct student),1,fpr)中,第一個參數表示b的地址,第二個參數表示一次所讀取 //的數據塊的字節數,第三個參數是數字1,表示每次讀取一個數據塊,最后一個為文件指針

-----------------------------------------------------------------------------------------------------------------------------------------------

文件復制方法
/*文件復制
by searcher
2002-9-12*/

#include <stdio.h> #include <stdlib.h> void filecp(FILE *,FILE *);void main(int argc, char *argv[]) {FILE *fpin, *fpout;printf("argc= %d/n",argc);if(argc < 3){printf("cmdline outto get at less than 3 cmd!/n");exit(0);} if(argc > 3){printf("cmdline outto get 3 cmd! /n");exit(0);}if(argc == 3){if( (fpin = fopen(argv[1],"r")) == NULL ){printf("can't open file! /n");exit(0);}if( (fpout = fopen(argv[2],"w")) == NULL){printf("can't open file! /n");exit(0);}filecp(fpin,fpout);fclose(fpin);fclose(fpout);}elseprintf("error!/n");}void filecp(FILE *fpin, FILE *fpout) {char ch;ch = getc(fpin);while(!feof(fpin)){putc(ch,fpout);ch = getc(fpin);} }

上面的程序總有問題,程序運行時命令行參數argc的個數為什么總是1呢??????
所以,運行結果也總是:"error!"

-----------------------------------------------------------------------------------------------------------------------------------------------

文件定位函數
1.fseek()函數:
??? 用來移動文件位置指針到指定的位置上,從此位置接著讀、寫操作。函數的調用形式如下:
???
???????? fseek(pf, offset, origin)

???????? pf是文件指針,offset是以字節為單位的位移量,為長整型數;origin是起始點,
?????? 用以指定位移量是以哪個位置為基準的,起始點既可用標識符來表示,也可用數字
?????? 來代表。

???? 標識符?????? 數字??? 代表的起始點
??? SEEK_SET?????? 0?????? 文件開始
??? SEEK_END??? 2?????? 文件末尾
??? SEEK_CUR?????? 1?????? 文件當前位置

例如:
??? fp已指向一個二進制文件,能使位置指針從文件的開頭向文件尾部移動20個字節的fseek()函數的
??? 調用形式如下:
???????
?????????? fseek(fp, 20L, SEEK_SET)

例如:
??? fp已指向一個二進制文件,能使位置指針從文件尾部向文件開頭移動10個sizeof(int)的函數的調
??? 用形式如下:

?????????? fseek(fp, -10L*sizeof(int), SEEK_END)

對于文本文件,位移量必須為0。
例如:fp已指向一個文本文件,能使位置指針移到文件起始位置的fseek()函數形式如下:
???????? fseek(fp, 0L, SEEK_SET)

例如:fp以指向一個文本文件,能使位置指針移到文件末尾的fseek()函數的調用形式如下:
???????? fseek(fp, 0L, SEEK_END)

2.ftell()函數:
??? 調用ftell()函數可以得到當前位置指針相對于文件起始位置的字節數。函數調用出錯時,返回-1L.
??? 例如:當打開一個文件時,通常并不知道該文件的長度,通過以下程序段可以求出該文件的字節數:

????????? fseek(fp, 0L, SEEK_END);?? //把位置指針移到文件末尾
????????? t = ftell(fp);???????????? //求出文件的總字節數
??? 再例如:某二進制文件中存放的struct st結構體類型數據,可以通過以下程序,可求出該結構體類型
??? 數據塊的個數:
?????????? fseek(fp, 0L, SEEK_END);
?????????? t = ftell(fp);
?????????? n = t/sizeof(struct st);

3.rewind()函數:
???? 又稱“反繞”函數,能使位置指針回到文件的開頭。函數調用形式如下:
??????????? rewind(fp);
????? fp為文件指針,此函數沒有返回值。

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

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

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