您好,登錄后才能下訂單哦!
今天小編給大家分享一下C語言中常見的文件操作方法是什么的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
大家在寫程序的時候有沒有一個困惑,就是我寫的程序,輸入一些數據后,當我把程序關掉以后數據就消失了。這是因為程序運行時,所有的數據都存儲在內存中,當程序退出后,程序中的數據自然就不存在了。等下次再運行程序時,又要重新錄入數據,非常難受
如何解決這個問題呢,我們可以學習使用文件來將其保存
在程序設計中,一般將文件分為兩部分:程序文件和數據文件
程序文件:
包括源程序文件(后綴為.c),目標文件(windows環境后綴為.obj),可執行程序(windows環境后綴為.exe)。
數據文件:
文件的內容不一定是程序,而是程序運行時讀寫的數據,比如程序運行需要從中讀取數據的文件或者輸出內容的文件
這次我們想要聊的是第二種數據文件,它可以幫助將我們運行時的數據存儲到磁盤中,以便我們下次使用
每一個文件都有自己的名字,它由三部分組成
文件路徑+文件名主干+文件后綴
c:\code\test.txt
想要打開一個文件,我們需要使用到文件指針,該指針是由系統聲明的,例如,VS2013編譯環境提供的 stdio.h 頭文件中有以下的文件類型申明
struct _iobuf { char *_ptr; int _cnt; char *_base; int _flag; int _file; int _charbuf; int _bufsiz; char *_tmpfname; }; typedef struct _iobuf FILE;
相信很多人看到這里,已經不想再讀下去了,堅持一下,前面這些并不重要
首先我們需要定義一個文件指針
FILE* pf
想要將數據存儲到文件中或者從文件中讀取數據,我們先要將文件打開,ANSIC 規定使用fopen函數來打開文件。
FILE * fopen ( const char * filename, const char * mode );
filename: 文件名
mode : 文件的打開方式
下面是一些常見的mode
文件使用方式 | 含義 | 如果指定文件不存在 |
---|---|---|
“r”(只讀) | 為了輸入數據,打開一個已經存在的文本文件 | 出錯 |
“w”(只寫) | 為了輸出數據,打開一個文本文件 | 建立一個新的文件 |
“a”(追加) | 向文本文件尾添加數據 | 建立一個新的文件 |
“rb”(只讀) | 為了輸入數據,打開一個二進制文件 | 出錯 |
“wb”(只寫) | 為了輸出數據,打開一個二進制文件 | 建立一個新的文件 |
“ab”(追加) | 向一個二進制文件尾添加數據 | 出錯 |
“r+”(讀寫) | 為了讀和寫,打開一個文本文件 | 出錯 |
“w+”(讀寫) | 為了讀和寫,建議一個新的文件 | 建立一個新的文件 |
“a+”(讀寫) | 打開一個文件,在文件尾進行讀寫 | 建立一個新的文件 |
“rb+”(讀寫) | 為了讀和寫打開一個二進制文件 | 出錯 |
“wb+”(讀寫) | 為了讀和寫,新建一個新的二進制文件 | 建立一個新的文件 |
“ab+”(讀寫) | 打開一個二進制文件,在文件尾進行讀和寫 | 建立一個新的文件 |
注:這里的輸入是指將數據寫到內存中,輸出是寫到文件中
3.讀寫數據后使用fclose關閉文件。
int fclose ( FILE * stream );
// 示例 #include <stdio.h> int main () { FILE * pFile; //打開文件 pFile = fopen ("myfile.txt","w"); //文件操作 if (pFile!=NULL) { fputs ("fopen example",pFile); //關閉文件 fclose (pFile); } return 0; }
現在我們知道了,如何去打開一個文件,那么如何將它的數據輸入到程序中呢?
首先我想介紹一些函數
功能 | 函數名 | 適用于 |
---|---|---|
字符輸入函數 | fgetc | 所有輸入流 |
字符輸出函數 | fputc | 所有輸出流 |
文本行輸入函數 | fgets | 所有輸入流 |
文本行輸出函數 | fputs | 所有輸出流 |
格式化輸入函數 | fscanf | 所有輸入流 |
格式化輸出函數 | fprintf | 所有輸出流 |
二進制輸入 | fread | 文件 |
二進制輸出 | fwrite | 文件 |
看不懂? 沒關系,接下來我將用一個示例告訴你如何使用。
//這是我以前寫通信錄時用到的一些方法 typedef struct Contact { struct contact_person* data; int count; //通訊錄中人員個數 int capacity; }Contact;//通訊錄類型的指針 void Save(Contact* con) //將數據存儲到文件中 { FILE* fp = fopen("contact.txt", "wb"); if (fp == NULL) { printf("Save()::%s", strerror(errno)); //如果打開失敗,報錯 return; } else { fwrite(con->data, sizeof(struct contact_person), con->count, fp);//將數據寫到contect.txt中 } fclose(fp); //關閉文件 fp = NULL; } void Load(Contact* con) //將文件中的數據加載到內存中 { FILE* fp = fopen("contact.txt", "r"); if (fp == NULL) { printf("Load()::%s", strerror(errno)); return; } else { struct contact_person tmp; while (fread(&tmp, sizeof(struct contact_person), 1, fp))// fread的返回值為讀到數據的個數,用來判斷是否繼續讀取 { Check_capacity(con);//檢測通訊錄容量是否足夠 con->data[con->count] = tmp; con->count++; } } fclose(fp); fp = NULL; }
以上就是“C語言中常見的文件操作方法是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。