所涉及到的函数如下:<stdio.h>
读写文件之前要先打开文件,使用完要关闭文件归返空间:
fopen 打开
fclose 关闭
返回的是FILE*型,第一个参数是文件的名字,第二个参数是以什么形式打开。
一、写入一个字符
第一个参数是要写进的字符,第二个是目标地址,写进一次会前进一次,不会直接覆盖在第一个
#include<stdio.h>
#include<string.h>
#include<errno.h>// 写一个字符 "A"
int main()
{// 以写的形式打开 名为test.txt的文件FILE* p = fopen("test.txt", "w");// 判断是否成功if (p == NULL){printf("%s\n", strerror(errno));return 1;}// 写入一个字符 fputc('A', p);//再写一个foutc('B',p);//关闭文件fclose(p);p = NULL;return 0;
}
二、读出一个字符
从stream 里面读取一个字符,返回值就是这个字符,如果读到尾部或者发生错误,会返回EOF
// 读一个字符
int main()
{// 以读的形式打开FILE* p = fopen("test.txt","r");// 判断是否成功if (p == NULL){printf("%s\n", strerror(errno));return 1;}// 读取一个字符char pc = fgetc(p);printf("%c\n", pc);//关闭文件fclose(p);p = NULL;return 0;
}
三、写入一行文本
以 “w” 形式打开文件会清除里面原有的信息
将 str 指向的数据拷贝到 stream指向的地址,直到读到 '\0'
int main()
{// 以写的形式打开一个文件FILE* pt = fopen("test.txt", "w");// 判断是否成功if (pt == NULL){printf("%s\n", strerror(errno));return 1;}// 写入字符串char arr[] = "hello ";fputs(arr,pt);fputs("baby!\n", pt);// 此时文件里面 只有hello 和 baby!// 关闭文件fclose(pt);pt = NULL;return 0;
}
四、读一行文本
跟 fputs 差不多,多了一个限制,num 是读取个数,读到n-1 处或者读到新的一行停止
int main()
{// 以读的形式打开一个文件FILE* pt = fopen("test.txt", "r");// 判断是否成功if (pt == NULL){printf("%s\n", strerror(errno));return 1;}// 读取char arr[] = {0};fgets(arr, 10, pt);printf("%s", arr);// 关闭文件fclose(pt);pt = NULL;return 0;
}
五、格式化输出
(输入输出都是相对于内存的,打印到文件里,相当于输出;从文件获取信息,相当于输入)
跟printf 类似,多了一个输出的对象,就是格式化将数据打印到 stream 指向的文件里
struct ps
{char arr[20];int i;float f;
};int main()
{struct ps x = { "mylove",20,1.68f };// 打开文件,写的形式FILE* op = fopen("test.txt", "w");//判断 是否成功if (op == NULL){perror("fopen");return 1;}// 写入文件(打印到文件)fprintf(op, "%s %d %f", x.arr, x.i, x.f);// 打印到屏幕 (stdout 是标准输出流,【屏幕】)fprintf(stdout, "%s %d %f", x.arr, x.i, x.f);// 关闭文件fclose(op);op = NULL;return 0;
}
六、格式化输入
类似 scanf ,从stream指向的文件,按照format的格式化读出数据
struct ps
{char arr[20];int i;float f;
};
int main()
{struct ps bobo = {0};// 打开文件 读rFILE* qp = fopen("test.txt", "r");// 判断……// 读 文件内容fscanf(qp, "%s %d %f", bobo.arr, &(bobo.i), &(bobo.f));printf("%s %d %f", bobo.arr, bobo.i, bobo.f);// 关闭文件fclose(qp);qp = NULL;return 0;
}
七、二进制输出(只针对于文件)
prt指向的对象是 被掏空的对象,stream指向的是要收获的对象
size 是输出元素的大小
count 是输出的个数
struct Peo
{char name[20];int age;float high;
};// fwrite 二进制写 "wb"int main()
{struct Peo s = { "lisi",20,180.5f };//打开文件FILE* ps = fopen("test.txt", "wb");//判断是否成功……// 写入fwrite(&s, sizeof(struct Peo), 1, ps);//关闭文件fclose(ps);ps = NULL;return 0;
}
八、二进制输入
参数和 fwrite函数 一样,不过这次风水轮流转,是从 stream指向的里面复制一份给ptr指向的地方
struct Peo
{char name[20];int age;float high;
};int main()
{struct Peo rp = { 0 };//打开文件FILE* pp = fopen("test.txt", "rb");// 判断……// 读入数据fread(&rp, sizeof(rp), 1, pp);printf("%s %d %f", rp.name, rp.age, rp.high);return 0;
}
scanf | 针对 标准输入 的格式化输入语句 |
printf | 针对 标准输出 的格式化输出语句 |
fscanf | 针对 所有输入流 的格式化输入语句 |
fprintf | 针对 所有输出流 的格式化输出语句 |
sscanf | 从一个字符串中转化出一个格式化的数据 |
sprintf | 把一个格式化的数据转化为字符串 |
FILE* stdin | 标准输入流(键盘) |
FILE* stdout | 标准输出流(屏幕) |
FILE* stderr | 标准错误流(屏幕) |