目錄
?1.fopen?打開文件
1.1 只讀打開文件,并且文件不存在
1.2 只寫打開文件,并且文件不存在
1.3?只寫打開文件,并且文件存在,且有內容
1.4 追加只寫打開文件,并且文件不存在
2.?fclose 關閉文件
3. fgetc?讀取一個字符
4.fputc?寫入一個字符
5.fgets?從文件中讀取一行字符串
(1)讀取的字節數小于文件一行內容,提前結束讀取
(2)讀取的字節數小于文件一行內容,提前結束讀取
6.fputs 向文件寫入一個字符串
?1.fopen?打開文件
函數原型:
/* 功能:創建或者打開一個文件
參數:
path:文件名,如果只寫文件名,默認就是當前路徑,也可以添加路徑
mode:文件權限
r 只讀打開:如果文件不存在則報錯,文件存在只讀打開
r+ 讀寫打開,如果文件不存在則報錯,文件存在讀寫打開
w 只寫打開,如果文件不存在則創建;如果文件存在則清空,只寫打開;
w+ 讀寫打開,如果文件不存在則創建;如果文件存在則清空,讀寫打開
a 追加只寫打開,如果文件不存在則創建;如果文件存在直接追加,只寫打開
a+ 追加讀寫打開,如果文件不存在則創建;如果文件存在則追加讀寫打開返回值:成功:文件指針失敗:NULL */
FILE *fopen(const char *path, const char *mode);
1.1 只讀打開文件,并且文件不存在
程序:
#include <stdio.h>int test1()
{//使用fopen函數打開或者創建文件,返回文件指針FILE *fp = NULL;//以只讀的方式打開文件,如果文件不存在則報錯fp = fopen("./file.txt", "r");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fclose關閉文件fclose(fp);
}int main(int argc, char *argv[])
{test1(fp);return 0;
}
運行結果:
1.2 只寫打開文件,并且文件不存在
程序:
#include <stdio.h>int test2()
{//使用fopen函數打開或者創建文件,返回文件指針FILE *fp = NULL;//以只寫的方式打開文件,如果文件不存在則創建,如果文件存在清空fp = fopen("./file.txt", "w");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fclose關閉文件fclose(fp);
}int main(int argc, char *argv[])
{ test2();return 0;
}
運行結果:
1.3?只寫打開文件,并且文件存在,且有內容
程序:與3.2只寫打開文件,并且文件不存在,程序相同
運行結果:
1.4 追加只寫打開文件,并且文件不存在
程序:
#include <stdio.h>int test3()
{//使用fopen函數打開或者創建文件,返回文件指針FILE *fp = NULL;//以只寫的方式打開文件,如果文件不存在則創建,文件存在則追加fp = fopen("./file.txt", "a");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fclose關閉文件fclose(fp);
}int main(int argc, char *argv[])
{test3();return 0;
}
運行結果:
2.?fclose 關閉文件
/*
功能:關閉一個文件指針,無法在對當前文件進行操作
參數:
stream:指定的文件指針,fopen函數的返回值返回值:
成功:0
失敗:EOF注意:注意一個文件只能關閉一次,不能多次關閉。
關閉文件之后就不能再文件指針對文件進行讀寫等操作了。
*/
int fclose(FILE *stream);
程序:見fopen?打開文件,程序最后。
3. fgetc?讀取一個字符
函數原型:
/* 功能:從文件指針標識的文件中讀取一個字符參數:stream:指定的文件指針返回值:成功:讀取的字符失敗:EOF如果文件讀取完畢,也會返回EOF */int fgetc(FILE *stream);
程序:
#include <stdio.h>int test1()
{FILE *fp = NULL;fp = fopen("./file.txt", "r");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fgetc從文件中讀取一個字符int c = fgetc(fp);printf("c = [%c] - %d\n", c, c);printf("test1 end \n");
}int main(int argc, char *argv[])
{FILE *fp = NULL;fp = fopen("./file.txt", "r");if(fp == NULL){printf("fail to fopen\n");return -1;}//文件的每一行結束的位置都有一個標識,是一個換行符,稱之為行結束符//fgetc可以讀取到行結束符int c;while((c = fgetc(fp)) != EOF){printf("c = [%c] - %d ", c, c);}printf(" \ntest1 start \n");test1();return 0;
}
運行結果:
4.fputc?寫入一個字符
函數原型:
/* 功能:向文件指針標識的文件中寫入一個字符參數:c:要寫入的字符stream:指定的文件指針返回值:成功:要寫入的字符失敗:EOF */
int fputc(int c, FILE *stream);
程序:
#include <stdio.h>int test1()
{FILE *fp = NULL;//只寫打開./file.txt,不存在則創建文件,文件存在則清空fp = fopen("./file.txt", "w");if(fp == NULL){printf("fail to fopen\n");return -1;}int i;//通過fputc函數向文件寫入一個字符i = fputc('h', fp);i = fputc('e', fp);i = fputc('l', fp);i = fputc('\n', fp);i = fputc('l', fp);i = fputc('o', fp);if(i == EOF){printf("fail to fputc\n");return -1;}return 0;
}int main(int argc, char *argv[])
{test1();return 0;
}
運行結果:
5.fgets?從文件中讀取一行字符串
函數原型:
/* 功能:從文件中讀取內容
參數:
s:保存讀取到的內容
size:每次讀取的最大個數
stream:文件指針返回值:
成功:讀取的數據的首地址
失敗:NULL如果文件內容讀取完畢,也返回NULL注意:從stream所指的文件中讀取字符,在讀取的時候碰到換行符或者是碰到文件的末尾停止讀取,或者是讀取了size‐1個字節停止讀取,在讀取的內容后面會加一個\0,作為字符串的結尾 */
char *fgets(char *s, int size, FILE *stream);
(1)讀取的字節數小于文件一行內容,提前結束讀取
程序:
#include <stdio.h>//fgets讀取的字節數大于文件一行內容,碰到 換行符 \n 提前結束讀取
int test1()
{FILE *fp = NULL;fp = fopen("./file.txt", "r");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fgets讀取文件內容//fgets每次讀取時最多讀取文件一行內容,只要遇到行結束符就立即返回char buf[32] = {0};//從fp里讀取32個字節到buffgets(buf, 32, fp);printf("buf = %s\n", buf);printf("test1 end \n");
}int main(int argc, char *argv[])
{printf("test1 start \n");test1();return 0;
}
運行結果:
(2)讀取的字節數小于文件一行內容,提前結束讀取
程序:
#include <stdio.h>//fgets讀取的字節數小于文件一行內容,提前結束讀取
int test2()
{FILE *fp = NULL;//file.txt內容 0123459789abcdefghijABCDEFGHIJfp = fopen("./file.txt", "r");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fgets讀取文件內容//fgets每次讀取時最多讀取文件一行內容,只要遇到行結束符就立即返回char buf[32] = {0};//從fp里讀取15個字節到buffgets(buf, 15, fp);printf("buf = %s\n", buf);printf("test2 end \n");
}int main(int argc, char *argv[])
{printf("test2 start \n");test2();return 0;
}
運行結果:
6.fputs 向文件寫入一個字符串
函數原型:
?/* 功能:向文件寫入數據參數:s:要寫入的內容stream:文件指針返回值:成功:寫入文件內容的字節數失敗:EOF */
int fputs(const char *s, FILE *stream);
程序:
#include <stdio.h>int main(int argc, char *argv[])
{FILE *fp = NULL;fp = fopen("./file.txt", "w");if(fp == NULL){printf("fail to fopen\n");return -1;}//通過fputs函數向文件寫入數據fputs("0123459789\n", fp);fputs("ABCDEFGHIJ", fp);fputs("9876543210", fp);return 0;
}
運行結果:
file.txt內容: