1 文件函数
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE* fp; // 定义文件指针
if ((fp = fopen("E:/test.txt", "r")) != NULL) {
while (!feof(fp)) { // 没有到文件末尾
char ch = fgetc(fp);
printf("%c",ch);
}
}
fclose(fp); // 关闭文件
return 0;
}
2 从文件中输入
char ch = fgetc(fp); // 读入一个字符
char str[10]; // 一次读入多个字符
if ((fp = fopen("E:/test.txt", "r")) != NULL) {
fgets(str, 4, fp); // 缓存的数组,读入几个字符, 文件指针
}
if ((fp = fopen("E:/test.txt", "r")) != NULL) {
fscanf(fp, "%s%s", str, strn);
// 可以同时输入多个参数
// 测试可以以空格隔开,或是换行,换行符可以有多个
}
fread(str, 1, 1, fp); // 缓冲区, 大小, 个数, 文件指针, 更适合读取结构体数据
3 文件写入
char str[] = "jfdsjjfkdsjfjsd ";
if ((fp = fopen("E:/test.txt", "r+")) != NULL) {
int t = fputs(str, fp); // 输出成功返回0
}
char str[] = "李勇加油,你一定能够考上";
char strw[] = "kao yan jiayou";
if ((fp = fopen("E:/test.txt", "a")) != NULL) {
fprintf(fp, "%s%s", str, strw);
}
4 结构体读入和写出
FILE* fp; // 定义文件指针
Student a;
Student b;
scanf("%s %d %d", &a.name, &a.age, &a.score);
cout << a.age << " " << a.score;
if ((fp = fopen("E:/test.txt", "wb")) != NULL) {
fwrite(&a, sizeof(struct Student), 1, fp);
}
fclose(fp);
if ((fp = fopen("E:/test.txt", "rb")) != NULL) {
fread(&b, sizeof(struct Student), 1, fp);
}
cout << endl;
cout << b.name << " " << b.age << " " << b.score;
fclose(fp); // 关闭文件
typedef struct Student {
char name[20];
int age;
int score;
}Student;
const int N = 3;
int main() {
FILE* fp; // 定义文件指针
Student a[10];
Student b[10];
for (int i = 0; i < N; i++) {
cout << "enter " << i << endl;
scanf("%s %d %d", &a[i].name, &a[i].age, &a[i].score);
}
if ((fp = fopen("E:/test.txt", "wb")) != NULL) {
for (int i = 0; i < N; i++) {
fwrite(&a[i], sizeof(struct Student), 1, fp);
}
}
fclose(fp);
if ((fp = fopen("E:/test.txt", "rb")) != NULL) {
for (int i = 0; i < N; i++) {
fread(&b[i], sizeof(struct Student), 1, fp);
}
}
cout << endl;
for (int i = 0; i < N; i++) {
printf("\n");
printf("%s %d %d", b[i].name, b[i].age, b[i].score);
}
fclose(fp); // 关闭文件
return 0;
}
5 文件随机读写
FILE* fp; // 定义文件指针
char str[100];
if ((fp = fopen("E:/test.txt", "r")) != NULL) {
fseek(fp, 2L, 0); // 移动两个字节, 0表示从头开始移动,
//1文件当前位置 2末尾
rewind(fp); // 文件回到开始
int i = ftell(fp); // 告诉文件位置
cout << "pos : " << i << endl;
fgets(str, 10, fp);
}
6 文件末尾
int main() {
FILE* fp;
char *st = (char *) malloc(100 * sizeof(char));
strcpy(st, "E:\\test.txt");
if ((fp = fopen(st, "r")) == nullptr)
printf("No");
while (!feof(fp))
{
char s[1024];
fscanf(fp, "%s", s);
printf("%s\n", s);
}
printf("finsh");
return 0;
}