C語言檔案操作學習記錄
- 檔案開啟 fopen()
FILE *fopen(const char *pname, const char *mode) |
引數 1.pname 開啟檔案的路徑,可絕對,可相對
2. mode 開啟檔案的方式
r 只讀,檔案必須存在
r+ 可讀寫,檔案必須存在
rb+ 二進位制檔案 同 r+
w 只寫 檔案存在則刪除其內容,不存在則建立檔案
w+ 讀寫 檔案存在則刪除其內容,不存在則建立檔案
a 追加僅可寫 檔案存在,在末尾附加內容,不存在則建立檔案
a+ 追加讀寫 檔案存在,在末尾附加內容,不存在則建立檔案
返回值 開啟成功返回FILE 的有效地址,失敗返回NULL
FILE *fp; if((fp=fopen("test","r")) == NULL) { printf("The file can not be opened.\m"); exit(1); } |
注意:C語言將計算機的輸入輸出裝置如鍵盤、螢幕均看成檔案處理,ANSI C 標準中規定,執行程式時系統自動開啟鍵盤、螢幕、錯誤三個檔案,這三個檔案指標由系統初始化,標準輸入stdin,標準輸出 stdout, 標準錯誤 stderr。
- 檔案關閉, fclose()
int fclose(FILE *fp); |
關閉檔案流,成功時返回0,否則返回EOF
- 檔案讀寫 :
- fgetc() 從檔案中讀取一個字元
char ch=fgetc(fp);//從當前指標位置讀取一個字元
ch=fgetc(fp); //從fp所指檔案的當前指標位置讀取一個字元 while(ch!=EOF) //判斷剛讀取的字元是否是檔案結束符 { putchar ch=fgetc(fp); //繼續從fp所指檔案中讀取下一個字元 } //完成將fp所指檔案的內容輸出到螢幕上顯示 fclose(fp); //關閉fp所指檔案 |
- fputc() 寫一個字元到檔案中去
int fputc(int ch, FILE *fp) // 正常返回要寫入的字元程式碼,否則返回EOF
- fgets() 從檔案中讀取一個字串
char *fgets(char *str, int n, FILE *fp)
從fp指向的檔案中讀取n-1個字元,並存放至str指出的字元陣列中,最後加上結束符'\0'
str:接收字串的記憶體地址,可以是陣列名,也可以是指標
正常返回str的值(即str地址),非正常返回NULL,
- fputs() 寫一個字串到檔案中去
int fputs(char *str, FILE *fp)
正常返回str的值(即str地址),非正常返回NULL,
- fprintf() 往檔案中寫格式化資料
int fprintf(FILE *fp, char *format, arg_list)
用法同 printf, 多一個變數fp,寫到檔案中去,printf() 將資料寫入螢幕檔案stdout
- fscanf() 格式化讀取檔案中資料
int fscanf(FILE *fp, char *format, arg_list)
- fread() 以二進位制形式讀取檔案中的資料
int fread( void *buffer, size_t size, size_t num, FILE *fp);
buffer 從fp中讀取的資料到緩衝區的首地址
size 讀取一個數據塊的位元組數
count 一次讀取塊的數量
正常返回資料塊的個數即num, 異常返回0
- fwrite() 以二進位制形式寫資料到檔案中去
struct Worker { int number; char name[20]; int age; }; struct Worker wk; FILE *in, *out; while(fread(&wk,sizeof(struct worker),1,in)==1) fwrite(&wk,sizeof(struct worker),1,out); |
- getw() 以二進位制形式讀取一個整數
int getw(FILE *fp)
讀取整數
正常返回讀取的整數,異常返回EOF -1
- putw() 以二進位制形式儲存一個整數
int putw(int n, FILE *fp);
正常返回輸出值,異常EOF -1
- 檔案狀態檢查函式
- feof 判斷檔案結束
int feof(FILE *fp)
未結束返回0, 結束返回1
- ferror 檔案讀/寫 出錯
int ferror(FILE *fp)
無錯誤返回0, 有錯誤 返回1
- clearerr 清除檔案錯誤標誌
void clearerr(FILE *fp)
- 檔案定位函式
- rewind 重置位置指標
void rewind(FILE *fp)
使fp指向的檔案位置指標重新指向檔案的開頭位置
- fseek 移動檔案的位置指標
int fseek(FILE *fp, long offset, int base)
使檔案指標fp移到基於base的相對位置offset處
offset 相對於base 的位元組位移量,
- ftell 瞭解檔案指標的當前位置
long ftell(FILE *fp)
取得由fp指定檔案的當前讀/寫位置,該位置用相對於檔案開頭的位移量來表示
正常返回位移量,異常返回-1,表示出錯
// 通過下列方式可以計算出檔案大小 fseek(fp,0,SEEK_END); // 先使用SEEK_END將指標移動到檔案最後 ftell(fp);//然後使用ftell獲得最後的偏移位元組數,也就是檔案的大小 |
- 二進位制和文字模式區別
- 在windows系統中,文字模式下,檔案以"\r\n"代表換行。若以文字模式開啟檔案,並用fputs等函式寫入換行符"\n"時,函式會自動在"\n"前面加上"\r"。即實際寫入檔案的是"\r\n" 。
- 在類Unix/Linux系統中文字模式下,檔案以"\n"代表換行。所以Linux系統中在文字模式和二進位制模式下並無區別。
- 在windows下,讀寫文字檔案的時候,是不寫b的,但讀寫二進位制檔案的時候一定要寫b,Linux,b是忽略的
- 參考
2.https://www.cnblogs.com/yongdaimi/p/6628806.html
感覺學習時還是記錄下,效果比較好,本篇文章主要是自己閱讀這倆篇部落格時的一些記錄,抄襲為主,但是在自己整理時也可以感受到如此比光看不記錄效果還是好不少,內容直接是複製我的OneNote筆記而來,格式有些錯亂, 第一次寫部落格,排版不是那麼美,也希望可以和愛學習的大家一起進步。