一、打开文件fopen()
fp=fopen("123.txt","w"); char buf[]="abc.txt"; fp=fopen(buf,"w"); char *p="123.txt"; fp=fopen(p,"r");
1、打开成功,返回有效地址
2、打开失败,返回NULL
3、“w”,如果文件不存在,新建一个123.txt,如果存在,清除里面的内容
4、“r”,如果文件不存在,打开失败
5、“a”,如果文件不存在,新建,如果存在,光标移动到最后面
二、读写文件
1、按字符读写fgetc()、fputc()
2、按字符串读取文件fgets()、fputs()
3、文件结尾判断 feof(),必须先读文件再判断
//写字符 fputc('a',fp); char ch = 'b'; while (ch<='w') { fputc(ch, fp); ch++; } char p[] = "xyz"; for (int i=0;i<strlen(p);i++) { fputc(p[i],fp); } //写字符串 char* p = "aiyou\n"; fputs(p,fp); char a[] = "bucuo\n"; fputs(a, fp); //读字符 char ch; while (1) { ch = fgetc(fp); //判断是否到结尾,到结尾返回真 if (feof(fp)) { break; } printf("ch=%c\n", ch); } //读字符串 char buf[100]; while (1) { fgets(buf, sizeof(buf), fp); if (feof(fp)) { break; } printf("%s", buf); }
三、关闭文件fclose()
fclose(fp)
四、实例
随机生成500个100以内的数字,写入到文件并读取出来
#include <stdio.h> #include <time.h> #include <stdlib.h> #include <string.h> #define MAX 500 void writefile() { FILE* fp = NULL; errno_t err; err = fopen_s(&fp, "C:\\Users\\aiyou\\Desktop\\123.txt", "w"); if (err != 0) { printf("文件打开失败!"); return; } //设置随机数种子 srand((unsigned int)time(NULL)); int i = 0; int num; char buf[100]; for (i=0;i<MAX;i++) { num = rand() % 100; //格式化字符串 sprintf_s(buf,100,"%d\n",num); fputs(buf, fp); } //关闭文件 fclose(fp); fp = NULL; } void readfile() { FILE* fp = NULL; errno_t err; err = fopen_s(&fp, "C:\\Users\\aiyou\\Desktop\\123.txt", "r"); if (err != 0) { printf("文件打开失败!"); return; } int a[1024]; int i = 0; char buf[100]; int num; while (1) { //读取一行内容,放在buf中,包含\n fgets(buf, sizeof(buf), fp); if (feof(fp)) { break; } sscanf_s(buf, "%d\n", &num); a[i] = num; i++; } int n = i; printf("n=%d\n", n); for (i=0;i<n;i++) { printf("%d, ",a[i]); } printf("\n"); } int main() { //writefile(); readfile(); system("pause"); return 0; }
运行结果: