C語言檔案讀寫函式詳解
阿新 • • 發佈:2019-01-26
1. 首先要理解幾個概念:
檔案: 按一定規則儲存在磁碟上的資料集合。
檔名: 能唯一標識某個磁碟檔案的字串。形式: 碟符:/ 路徑 / 檔名.副檔名
文字檔案:: 資料以其數字字元的ASCII碼形式、一個位元組一個位元組地儲存在磁碟上。
二進位制檔案:資料以二進位制形式在儲存在磁碟上。
裝置檔案:輸入/輸出裝置
標準輸入檔案:鍵盤
標準輸出檔案/標準錯誤輸出檔案:顯示器
檔案型指標:C語言是通過名為FILE的結構型指標來管理檔案讀寫的。FILE *<變數名>
檔案的開啟和關閉 :檔案操作先建立檔案與檔案指標之間的關係,接著進行檔案的讀與寫。建立檔案與檔案指標之間的聯絡的過程是檔案的開啟。終止這種聯絡就是檔案的關閉。
FILE結構:定義在〈stdio.h〉中。形式如下:
typedef struct
{
int _fd; /*檔案代號*/
int _cleft; /* 檔案緩衝區所剩位元組數*/
int _mode; /* 檔案使用模式*/
char *nextc; /* 下一個等待處理的位元組地址, 即檔案內部指標*/
char *buff; /* 檔案緩衝區首地址 */
}FILE;
2. 主要操作函式用相應的使用
1) 檔案的開啟與關閉:
#include <stdio.h>
FILE *fp;
fp = fopen(char* filename, char* made);
if(fp == NULL)
{
exit(0);
}
fclose(fp)
mode和種類有:
r : 開啟一個文字檔案,供讀取資料, 檔案不存在,則返回NULL
w : 建立一個供寫入的文字檔案. 廢棄原有內容
a: 開啟或建立一個把資料追加到檔案尾的文字檔案
r+: 更新資料
w+ : 更新資料,廢棄原有內容
a+ : 更新資料, 寫入的資料追加到檔案尾.
二進位制在後面加"b"
標準輸入/輸出檔案的檔案型指標: stdin, stdout, stderr
2) 檔案的讀與寫:
把一個字元寫入檔案, 或從檔案中讀取一個字元: 檔案內部指標自動移向下一位可讀寫的位置
int fputc(char ch, FILE *fp);
int fgetc( FILE *fp)
把一行資料寫入檔案, 或讀取一行資料:
char * fputs(char *str, FILE *fp)
char * fgets(char *str, int n, FILE *fp) ; // 讀取N-1 個字元,第N個字元補'/0'
把指定位元組數的若干資料寫入檔案, 或讀出檔案.
int fwrite(char * buf, unsigned size, unsigned n, FILE *fp); size 每個資料的位元組數, n 個數據.
int fread(char *buf, unsigned size, unsigned n, FILE *fp);
把指定格式的資料寫入檔案, 或讀取指定格式的資料
int fprintf(FILE *fp, char *format, e1,e2,......en);
int fscanf(FILE *fp, char *format, e1,e2,......en);
3) 檔案位置的確定與指標管理.
檔案尾的測試: int feof(FILE *fp); //當前已到達檔案尾返回非0, 否則返回0
不同的計算機系統以不同的鍵盤組合鍵形成檔案的結束符. IBM PC及其相容機是<ctrl> + z
把檔案內部指標重新定位到檔案的起始位置 int rewind(FILE *fp);
把檔案內部指標定位到指定的位置: int fseek(FILE *fp, long offset, int from);
from 是定位的起始點.
SEEK_SET 0 從檔案頭開始
SEEK_CUR 1 從檔案內部指標當前位置開始
SEEK_END 2 從檔案尾開始
offset 是以From 為起始點的依稀位元組數,大於0表示向檔案尾方向, 0 不移動,
檔案操作出錯測式 int ferror(FILE *fp);
用於對由FP指向的檔案最近一次操作進行正確性測試. 出錯返回非0,還沒返回0
4) 檔案的刪除
int remove(char * filename);
3. 一些以前我沒想到的知識點.
char ch;
ch = getchar () 功能等價於 ch = fgetc(stdin) 功能等價於 scanf("%c",ch) 功能等價於 fscanf(stdin, "%c",ch)
putchar(ch) 功能等價於 printf("%c",ch) 功能等價於 fputc(stdout) 功能等價於 fprintf(stdout, "%c", ch)
檔案: 按一定規則儲存在磁碟上的資料集合。
檔名: 能唯一標識某個磁碟檔案的字串。形式: 碟符:/ 路徑 / 檔名.副檔名
文字檔案:: 資料以其數字字元的ASCII碼形式、一個位元組一個位元組地儲存在磁碟上。
二進位制檔案:資料以二進位制形式在儲存在磁碟上。
裝置檔案:輸入/輸出裝置
標準輸入檔案:鍵盤
標準輸出檔案/標準錯誤輸出檔案:顯示器
檔案型指標:C語言是通過名為FILE的結構型指標來管理檔案讀寫的。FILE *<變數名>
檔案的開啟和關閉 :檔案操作先建立檔案與檔案指標之間的關係,接著進行檔案的讀與寫。建立檔案與檔案指標之間的聯絡的過程是檔案的開啟。終止這種聯絡就是檔案的關閉。
FILE結構:定義在〈stdio.h〉中。形式如下:
typedef struct
{
int _fd; /*檔案代號*/
int _cleft; /* 檔案緩衝區所剩位元組數*/
int _mode; /* 檔案使用模式*/
char *nextc; /* 下一個等待處理的位元組地址, 即檔案內部指標*/
char *buff; /* 檔案緩衝區首地址 */
}FILE;
2. 主要操作函式用相應的使用
1) 檔案的開啟與關閉:
#include <stdio.h>
FILE *fp;
fp = fopen(char* filename, char* made);
if(fp == NULL)
{
exit(0);
}
fclose(fp)
mode和種類有:
r : 開啟一個文字檔案,供讀取資料, 檔案不存在,則返回NULL
w : 建立一個供寫入的文字檔案. 廢棄原有內容
a: 開啟或建立一個把資料追加到檔案尾的文字檔案
r+: 更新資料
w+ : 更新資料,廢棄原有內容
a+ : 更新資料, 寫入的資料追加到檔案尾.
二進位制在後面加"b"
標準輸入/輸出檔案的檔案型指標: stdin, stdout, stderr
2) 檔案的讀與寫:
把一個字元寫入檔案, 或從檔案中讀取一個字元: 檔案內部指標自動移向下一位可讀寫的位置
int fputc(char ch, FILE *fp);
int fgetc( FILE *fp)
把一行資料寫入檔案, 或讀取一行資料:
char * fputs(char *str, FILE *fp)
char * fgets(char *str, int n, FILE *fp) ; // 讀取N-1 個字元,第N個字元補'/0'
把指定位元組數的若干資料寫入檔案, 或讀出檔案.
int fwrite(char * buf, unsigned size, unsigned n, FILE *fp); size 每個資料的位元組數, n 個數據.
int fread(char *buf, unsigned size, unsigned n, FILE *fp);
把指定格式的資料寫入檔案, 或讀取指定格式的資料
int fprintf(FILE *fp, char *format, e1,e2,......en);
int fscanf(FILE *fp, char *format, e1,e2,......en);
3) 檔案位置的確定與指標管理.
檔案尾的測試: int feof(FILE *fp); //當前已到達檔案尾返回非0, 否則返回0
不同的計算機系統以不同的鍵盤組合鍵形成檔案的結束符. IBM PC及其相容機是<ctrl> + z
把檔案內部指標重新定位到檔案的起始位置 int rewind(FILE *fp);
把檔案內部指標定位到指定的位置: int fseek(FILE *fp, long offset, int from);
from 是定位的起始點.
SEEK_SET 0 從檔案頭開始
SEEK_CUR 1 從檔案內部指標當前位置開始
SEEK_END 2 從檔案尾開始
offset 是以From 為起始點的依稀位元組數,大於0表示向檔案尾方向, 0 不移動,
檔案操作出錯測式 int ferror(FILE *fp);
用於對由FP指向的檔案最近一次操作進行正確性測試. 出錯返回非0,還沒返回0
4) 檔案的刪除
int remove(char * filename);
3. 一些以前我沒想到的知識點.
char ch;
ch = getchar () 功能等價於 ch = fgetc(stdin) 功能等價於 scanf("%c",ch) 功能等價於 fscanf(stdin, "%c",ch)
putchar(ch) 功能等價於 printf("%c",ch) 功能等價於 fputc(stdout) 功能等價於 fprintf(stdout, "%c", ch)