C C 中的檔案操作

2021-05-10 13:23:49 字數 3314 閱讀 2616

1.fopen()

fopen的原型是:file *fopen(const char *filename,const char *mode),fopen實現三個功能

為使用而開啟乙個流 

把乙個檔案和此流相連線 

給此流返回乙個file指標

引數filename指向要開啟的檔名,mode表示開啟狀態的字串,其取值如下表

字串 含義 

"r" 以唯讀方式開啟檔案 

"w" 以只寫方式開啟檔案 

"a" 以追加方式開啟檔案 

"r+" 以讀/寫方式開啟檔案,如無檔案出錯 

"w+" 以讀/寫方式開啟檔案,如無檔案生成新檔案 

乙個檔案可以以文字模式或二進位制模式開啟,這兩種的區別是:在文字模式中回車被當成乙個字元''/n'',而二進位制模式認為它是兩個字元0x0d,0x0a;如果在檔案中讀到0x1b,文字模式會認為這是檔案結束符,也就是二進位制模型不會對檔案進行處理,而文字方式會按一定的方式對資料作相應的轉換。

系統預設的是以文字模式開啟,可以修改全部變數_fmode的值來修改這個設定,例如_fmode=o_text;就設定預設開啟方式為文字模式;而_fmode=o_binary;則設定預設開啟方式是二進位制模式。

我們也可以在模式字串中指定開啟的模式,如"rb"表示以二進位制模式開啟唯讀檔案,"w+t"或"wt+"表示以文字模式開啟讀/寫檔案。

此函式返回乙個file指標,所以申明乙個file指標後不用初始化,而是用fopen()來返回乙個指標並與乙個特定的檔案相連,如果成敗,返回null。

例:file *fp; 

if(fp=fopen("123.456","wb"))

puts("開啟檔案成功");

else 

puts("開啟檔案成敗"); 

2.fclose() 

fclose()的功能就是關閉用fopen()開啟的檔案,其原型是:int fclose(file *fp);如果成功,返回0,失敗返回eof。

在程式結束時一定要記得關閉開啟的檔案,不然可能會造成資料丟失的情況,我以前就經常犯這樣的毛病。

3.fputc()

向流寫乙個字元,原型是int fputc(int c, file *stream); 成功返回這個字元,失敗返回eof。

4.fgetc()

從流中讀乙個字元,原型是int fputc(file *stream); 成功返回這個字元,失敗返回eof。

5. fseek()

此函式一般用於二進位制模式開啟的檔案中,功能是定位到流中指定的位置,原型是int fseek(file *stream, long offset, int whence);如果成功返回0,引數offset是移動的字元數,whence是移動的基準,取值是

符號常量 值 基準位置 

seek_set 0 檔案開頭 

seek_cur 1 當前讀寫的位置 

seek_end 2 檔案尾部 

例:fseek(fp,1234l,seek_cur);//把讀寫位置從當前位置向後移動1234位元組(l字尾表示長整數)

fseek(fp,0l,2);//把讀寫位置移動到檔案尾

6.fputs()

寫乙個字串到流中,原型int fputs(const char *s, file *stream); 

例:fputs("i love you",fp);

7.fgets()

從流中讀一行或指定個字元,原型是char *fgets(char *s, int n, file *stream); 從流中讀取n-1個字元,除非讀完一行,引數s是來接收字串,如果成功則返回s的指標,否則返回null。

8.fprintf()

按格式輸入到流,其原型是int fprintf(file *stream, const char *format[, argument, …]);其用法和printf()相同,不過不是寫到控制台,而是寫到流罷了

例:fprintf(fp,"%2d%s",4,"hahaha");

9.fscanf()

從流中按格式讀取,其原型是int fscanf(file *stream, const char *format[, address, …]);其用法和scanf()相同,不過不是從控制台讀取,而是從流讀取罷了。

例:fscanf(fp,"%d%d" ,&x,&y);

10.feof()

檢測是否已到檔案尾,是返回真,否則返回0,其原型是int feof(file *stream);

例:if(feof(fp))printf("已到檔案尾");

11.ferror()

原型是int ferror(file *stream);返回流最近的錯誤**,可用clearerr()來清除它,clearerr()的原型是void clearerr(file *stream);

例:printf("%d",ferror(fp));

12.rewind()

把當前的讀寫位置回到檔案開始,原型是void rewind(file *stream);其實本函式相當於fseek(fp,0l,seek_set);

例:rewind(fp);

12.remove()

刪除檔案,原型是int remove(const char *filename); 引數就是要刪除的檔名,成功返回0。

例:remove("c://io.sys");

13.fread()

從流中讀指定個數的字元,原型是size_t fread(void *ptr, size_t size, size_t n, file *stream);引數ptr是儲存讀取的資料,void*的指標可用任何型別的指標來替換,如char*、int *等等來替換;size是每塊的位元組數;n是讀取的塊數,如果成功,返回實際讀取的塊數(不是位元組數),本函式一般用於二進位制模式開啟的檔案中。

例:char x[4230];

file *file1=fopen("c://msdos.sys","r");

fread(x,200,12 ,file1);//共讀取200*12=2400個位元組

14.fwrite()

與fread對應,向流中寫指定的資料,原型是size_t fwrite(const void *ptr, size_t size, size_t n, file *stream);引數ptr是要寫入的資料指標,void*的指標可用任何型別的指標來替換,如char*、int *等等來替換;size是每塊的位元組數;n是要寫的塊數,如果成功,返回實際寫入的塊數(不是位元組數),本函式一般用於二進位制模式開啟的檔案中。

例:char x="i love you";

fwire(x, 6,12,fp);//寫入6*12=72位元組

將把"i love"寫到流fp中12次,共72位元組

C C 中的檔案操作 2

c 檔案操作。c 中引入了stream,相關的標頭檔案,支援檔案輸入與輸出,還有兩個和,分別支援檔案讀入和寫入。內容的讀取與寫入 c 引入了流操作,流操作符 和 用來從檔案讀取內容或把內容寫入檔案。istream operator type val 與fscanf對應,格式化的讀取內容,格式由值的t...

C C 的檔案讀寫操作

檔案讀寫是經常用到的,在c c 中關於檔案讀寫的函式也很毒,最近在使用檔案讀寫的時候就發現一些問題,總結一下 1.fgetc 函式原型是 int fgetc file stream 該函式每一次從檔案中讀取乙個字元,對於空格和回車都可以讀取!source.txt 檔案內容為 thank you ve...

C C 檔案操作 2

ofstream fs binary ios binary ofstream fs character.txt int i 32765 fs 無論以二進位制檔案模式開啟還是以文字模式開啟,檔案中都是儲存著文字!似乎c c 中的binary 模式不起作用!後來查閱資料才知道 要想在c c 中將資料以二...