一.fopen與fclose函數
linux中fopen函數直接用man fopen 去查看
函數原型
FILE * fopen(constchar *path , cost char *mode)
/*
* @description : 打開一個文件
* @param ‐ path : 指定文件路徑,如:"./test.txt",也可以直接由文件名
* @param ‐ mode :指定文件的打開方式,如下圖:
* @return : 成功,返回指向該文件的文件指針; 若失敗,返回 NULL
*/
參數說明:第一個參數為欲打開文件的文件路徑及文件名,第二個參數表示對文件的打開方式
返回值:
文件打開了,返回一個指向該打開文件的指針(FILE結構);文件打開失敗,錯誤上存errorcode(錯誤代碼)。注意:在fopen操作后要進行判斷,是否文件打開,文件真正打開了才能進行后面的讀或寫操作,如有錯誤
要進行錯誤處理。
mode有以下值:
r:只讀方式打開,文件必須存在
r+:可讀寫,文件必須存在
rb+:打開二進制文件,可以讀寫
rt+:打開文本文件,可讀寫
w:只寫,文件存在則文件長度清0,文件不存在則建立該文件
w+:可讀寫,文件存在則文件長度清0,文件不存在則建立該文件
a:附加方式打開只寫,不存在建立該文件,存在寫入的數據加到文件尾,EOF符保留
a+:附加方式打開可讀寫,不存在建立該文件,存在寫入的數據加到文件尾,EOF符不保留
wb:打開二進制文件,只寫 wb+:打開或建立二進制文件,可讀寫
wt+:打開或建立文本文件,可讀寫
at+:打開文本文件,可讀寫,寫的數據加在文本末尾
ab+:打開二進制文件,可讀寫,寫的數據加在文件末尾
由mode字符可知,上述如r、w、a在其后都可以加一個b,表示以二進制形式打開文件
二.fread與fwrite函數
fread函數:從文件中讀取數據到指定的地址中
函數原型
size_t fread(void*buff , size_t size, size_t count , FILE* stream)
/*
* @description :對已打開的流進行數據讀取
* @param ‐ ptr :指向 數據塊的指針
* @param ‐ size :指定讀取的每個數據項的字節數(一次讀多少字節)
* @param ‐ nmemb : 指定要讀取的數據項的個數(一次讀多少次)
* @param ‐ stream :要讀取的文件流
* @return : 返回實際讀取數據項的個數;
*/
參數:
第一個參數為接收數據的指針(buff),也即數據存儲的地址
第二個參數為單個元素的大小,即由指針寫入地址的數據大小,注意單位是字節
第三個參數為元素個數,即要讀取的數據大小為size的元素個素
第四個參數為提供數據的文件指針,該指針指向文件內部數據
返回值:讀取的總數據元素個數列如
int num,count;
int* pr=new int[num*count];
fread(pr, num*4, count, stream); //stream為fopen中返回的FILE指針要將數據寫入pr中,必須為pr分配內存,一個int為4個字節,所以要x4int fread(void *buffer,intsize,intcount,FILE*fp)
void *memset(void*buffer, int c, int count)
buffer:為指針或是數組
c:是賦給buffer的值
count:是buffer的長度
memset(void*buff,0,sizeof(buff)); 用來對一段內存空間全部設置為某個字符,一般用在對定義的字符串進行初
始化為‘’或‘/0’;
fwrite()──從buffer開始,一次輸出size個字節,重復count次,并將輸出的數據存放到fp所指向的文件中。buffer是要輸出數據在 內存中的起始地址(即從何處開始輸出)。
一般用于二進制文件的處理。
fread函數是把文件里的內容讀出來然后放到一個數組中,fwrite函數是寫內容到一個文件里。
模式改成可讀可寫
之前我們再mm文件中寫了123456789,之后用fread函數將其讀出來并且輸出,現在我們用fwrite函數繼續往mm文件中寫入四個字節,注意,用fread函數的時候將光標移動到了8的后面,所以寫入的數據把9覆蓋了。
三.fseek函數
接著上面的程序寫代碼,fread之后光標是在8后面的,我們現在將光標移動到離文件開頭有1距離的位置,即1之后,所以我們再次寫入的時候hello是在1之后,將其他內容覆蓋了