C語言檔案讀寫操作介紹與簡單示例
檔案的開啟函式fopen()
檔案的開啟操作表示將給使用者指定的檔案在記憶體分配一個FILE結構區,並將該結構的指標返回給使用者程式,以後使用者程式就可用此FILE指標來實現對指定檔案的存取操作了。當使用開啟函式時,必須給出檔名、檔案操作方式(讀、寫或讀寫),如果該檔名不存在,就意味著建立(只對寫檔案而言,對讀檔案則出錯),並將檔案指標指向檔案開頭。若已有一個同名檔案存在,則刪除該檔案,若無同名檔案,則建立該檔案,並將檔案指標指向檔案開頭。
fopen(char *filename,char *type);
其中filename是要開啟檔案的檔名指標,一般用雙引號括起來的檔案名錶示,也可使用雙反斜槓隔開的路徑名。而type引數表示了對開啟檔案的操作方式。其可採用的操作方式如下: 方式 含義 “r” 開啟,只讀; “w” 開啟,檔案指標指到頭,只寫; “a” 開啟,指向檔案尾,在已存在檔案中追加; “rb” 開啟一個二進位制檔案,只讀; “wb” 開啟一個二進位制檔案,只寫; “ab” 開啟一個二進位制檔案,進行追加 ;“r+” 以讀/寫方式開啟一個已存在的檔案; “w+” 以讀/寫方式建立一個新的文字檔案 ;“a+” 以讀/寫方式開啟一個檔案檔案進行追加 ;“rb+” 以讀/寫方式開啟一個二進位制檔案; “wb+” 以讀/寫方式建立一個新的二進位制檔案 ;“ab+” 以讀/寫方式開啟一個二進位制檔案進行追加 ;當用fopen()成功的開啟一個檔案時,該函式將返回一個FILE指標,如果檔案開啟失敗,將返回一個NULL指標。
關閉檔案函式fclose()
檔案操作完成後,必須要用fclose()函式進行關閉,這是因為對開啟的檔案進行寫入時,若檔案緩衝區的空間未被寫入的內容填滿,這些內容不會寫到開啟的檔案中去而丟失。只有對開啟的檔案進行關閉操作時,停留在檔案緩衝區的內容才能寫到該檔案中去,從而使檔案完整。再者一旦關閉了檔案,該檔案對應的FILE結構將被釋放,從而使關閉的檔案得到保護,因為這時對該檔案的存取操作將不會進行。檔案的關閉也意味著釋放了該檔案的緩衝區。
int fclose(FILE *stream);
它表示該函式將關閉FILE指標對應的檔案,並返回一個整數值。若成功地關閉了檔案,則返回一個0值,否則返回一個非0值。
int read(int handle,void *buf,int count);
read()函式從handle(檔案描述字)相連的檔案中,讀取count個位元組放到buf所指的緩衝區中,返回值為實際所讀位元組數,返回-1表示出錯。返回0 表示檔案結束。
write()函式的呼叫格式為:
int write(int handle,int count);
write()函式把count個位元組從buf指向的緩衝區寫入與handle相連的檔案中,返回值為實際寫入的位元組數。
size_t fread( void *buffer,size_t size,size_t count,FILE *stream )
buffer 是讀取的資料存放的記憶體的指標(可以是陣列,也可以是新開闢的空間,buffer就是一個索引)
size 是每次讀取的位元組數
count 是讀取次數
stream 是要讀取的檔案的指標
size_t fwrite ( const void * ptr,FILE * stream );
其中,ptr:指向儲存資料的指標;size:每個資料型別的大小;count:資料的個數;stream:檔案指標 ; 函式返回寫入資料的個數。
fseek
函式名: fseek
功 能: 重定位流上的檔案指標
用 法: int fseek(FILE *stream,long offset,int fromwhere);
描 述: 函式設定檔案指標stream的位置。如果執行成功,stream將指向以fromwhere為基準,偏移offset個字 節的位置。
如果執行失敗(比如offset超過檔案自身大小),則不改變stream指向的位置。
返回值: 成功,返回0,否則返回其他值。
fromwhere有三個可選值:SEEK_SET 開始 SEEK_CUR現在指標所指的位置 SEEK_END末尾
ftell
用於得到二進位制檔案位置指標當前位置相對於檔案首的偏移位元組數。在隨機方式存取檔案時,由於檔案位置頻繁的前後移動,程式不容易確定檔案的當前位置。
long ftell(FILE *stream); int fprintf(FILE *stream,char *format,variable-list) int fscanf(FILE *stream,variable-list)
fprintf()則是向流指標指向的檔案輸出;fscanf()是從檔案輸入
簡單的例子:先讀取檔案內容,再向檔案寫資料
#include "pch.h" #include <iostream> #include<stdio.h> #include<stdlib.h> using namespace std; int main() { const char *filename ="test.txt"; FILE *fp; //以追加讀寫的方式開啟檔案 fopen_s(&fp,"test.txt","ab+"); if (!fp) { printf("open file %s failed!",filename); } //統計檔案大小 fseek(fp,SEEK_END); int len = ftell(fp); //若使用fseek,ftell統計檔案大小,那麼在獲得大小後要將指標移回原來的位置,因為fseek會改變指標的位置 fseek(fp,0); //儲存從檔案中讀去的資料 char buf[10000] = {0}; //讀取檔案 fread(buf,len,1,fp); //關閉 fclose(fp); //重新開啟,不然會寫入失敗,不知道為什麼 fopen_s(&fp,"ab+"); cout << buf << endl; //儲存寫入檔案的內容 char writebuf[1024]; char ch = 0; int i = 0; //讀取輸入字元,以換行符結束 while ((ch=getchar())!='\n') { writebuf[i++] = ch; } writebuf[i++] = '\n'; writebuf[i++] = '\0'; //向檔案末尾新增資料 int flen=fwrite(writebuf,i,fp); //關閉資料 fclose(fp); return 0; }
總結
到此這篇關於C語言檔案讀寫操作介紹與簡單示例的文章就介紹到這了,更多相關c語言檔案讀寫操作內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!