1. 打開文件 函數定義:FILE *fopen(char *pname, char *mode) 函數說明:pname 是文件名,mode 是打開文件的方式( r:只讀,w:只寫) 返回值:若返回 NULL,則打開失敗。 2. 關閉文件 函數定義:int fclose(FILE *stream) ...
1. 打開文件
函數定義:FILE *fopen(char *pname, char *mode)
函數說明:pname 是文件名,mode 是打開文件的方式( r:只讀,w:只寫)
返回值:若返回 NULL,則打開失敗。
2. 關閉文件
函數定義:int fclose(FILE *stream)
函數說明:stream 為指向 FILE 對象的指針
返回值:若返回 0,則關閉成功。
3. 讀取一個字元
函數定義:int fgetc(FILE *stream)
函數說明:stream 為指向 FILE 對象的指針
返回值:若返回 EOF,則讀取失敗。
4. 寫一個字元到文件中
函數定義:int fputc(int char, FILE *stream)
函數說明:char 為要寫入的字元,以整形傳遞;stream 為指向 FILE 對象的指針
返回值:若返回 EOF ,則寫入失敗。
下麵使用上面函數實現功能,將一個文件的內容複製到另一個文件中去。代碼如下:
1 /* 2 文件操作:將一個文件的內容複製到另一個文件中去 3 */ 4 5 #include <stdio.h> 6 7 int main() { 8 int ch; 9 FILE *in, *out; // 指向輸入、輸出文件的指針 10 // 文件打開失敗 11 if((in=fopen("in.txt", "r"))==NULL || (out=fopen("out.txt", "w"))==NULL) { 12 return; 13 } 14 ch = fgetc(in); // 輸入一個字元 15 while(ch != EOF) { 16 fputc(ch, out); // 寫入一個字元 17 ch = fgetc(in); // 繼續輸入 18 } 19 fclose(in); // 關閉文件流 20 fclose(out); 21 22 return 0; 23 }
5. 讀取一個字元串
函數定義:char *fgets(char *str, int n, FILE *stream)
函數說明:str 儲存輸入的字元串,n 表示讀取 n-1 個字元,stream 為指向 FILE 對象的指針
返回值:若返回 NULL,則表示沒有任何輸入。
6. 往文件中寫格式化數據
函數定義:int fprintf(FILE *stream, const char *format, ...)
函數說明:與 printf 函數差不多,stream 為指向 FILE 對象的指針
返回值:如果成功,則返回寫入的字元總數,否則返回一個負數。
7. 讀取格式化數據
函數定義:int fscanf(FILE *stream, const char *format, ...)
函數說明:與 scanf函數差不多,stream 為指向 FILE 對象的指針
返回值:如果成功,該函數返回成功匹配和賦值的個數。如果到達文件末尾或發生讀錯誤,則返回 EOF。
用上面介紹的函數可實現文件的格式化輸入和輸出,代碼如下:
1 /* 2 文件操作:文件的格式化輸入和輸出 3 */ 4 5 #include <stdio.h> 6 7 int main() { 8 int id, age; // 號次、年齡 9 char name[10]; // 姓名 10 FILE *in, *out; // 指向輸入、輸出文件的指針 11 // 打開文件失敗 12 if((in=fopen("in.txt", "r"))==NULL || (out=fopen("out.txt", "w"))==NULL) { 13 return; 14 } 15 // 按格式輸入 16 while(fscanf(in, "%d %s %d", &id, name, &age) != EOF) { 17 // 按格式輸出 18 fprintf(out, "id = %04d, name = %s, age = %02d\n", id, name, age); 19 } 20 21 return 0; 22 }
8. 判斷文件結束
函數定義:int feof(FILE *stream)
函數說明:stream 為指向 FILE 對象的指針
返回值:當設置了與流關聯的文件結束標識符時,該函數返回一個非零值,否則返回零。
測試代碼如下:
1 /* 2 文件操作:feof 3 */ 4 5 #include <stdio.h> 6 #include <string.h> 7 #include <math.h> 8 #include <stdlib.h> 9 #include <time.h> 10 #include <stdbool.h> 11 12 int main() { 13 char str[512]; 14 FILE* in; 15 // 文件打開失敗 16 if((in=fopen("in.txt", "r")) == NULL) { 17 return; 18 } 19 while(!feof(in)) { 20 fgets(str, 512, in); // 輸入一整行 21 printf("%s", str); // 輸出 22 } 23 24 return 0; 25 }