|
本帖最后由 小白学编程 于 2021-8-24 11:04 编辑
- void test01()
- {
- //写文件 fputc
- FILE* f_write = fopen("./test1.txt", "w");
- if (f_write == NULL)
- {
- //error宏
- //printf("文件加载失败!\n");
- perror("文件加载失败!");
- return;
- }
- char buf[] = "hello worid";
- for (int i = 0; i < strlen(buf); i++)
- {
- fputc(buf[i], f_write);
- }
- fclose(f_write);
- //读文件 fgetc
- FILE* f_read = fopen("./test1.txt", "r");
- if (f_read == NULL)
- {
- return;
- }
- char ch;
- while ((ch= fgetc(f_read)) != EOF) //EOF END OF FILE 文件的结尾
- {
- printf("%c", ch);
- }
- fclose(f_read);
- }
- int main(void)
- {
- test01();
- return EXIT_SUCCESS;
- }
复制代码
文件操作 按行读写
- void test02()
- {
- //写文件
- FILE* f_write = fopen("./test2.txt", "w+");
- if (f_write == NULL)
- {
- return;
- }
- char* buf[] =
- {
- "飞流直下三千尺",
- "看见烤鸭流口水",
- "一摸口袋没带钱",
- };
- for (int i = 0; i < 3; i++)
- {
- fputs(buf[i], f_write);
- }
- fclose(f_write);
- //读文件
- FILE* f_read = fopen("./test2.txt", "r");
- if (f_read == NULL)
- {
- return;
- }
- while (!feof(f_read))
- {
- char temp[1024] = { 0 };
- fgets(temp, 1024, f_read);
- printf("%s",temp);
- }
- fclose(f_read);
- }
- int main(void)
- {
- test02();
- return EXIT_SUCCESS;
- }
复制代码
文件操作--按块读写
- struct Hero
- {
- char name[64];
- int age;
- };
- void test01()
- {
- //写文件
- FILE* f_wirte = fopen("./test3.txt", "wb");
- if (f_wirte == NULL)
- {
- return;
- }
- struct Hero heros[] =
- {
- {"孙悟空",999},
- {"鲁班",10},
- {"曹操",20},
- {"程咬金",30},
- {"貂蝉",40},
- {"赵云",50},
- {"妲己",60},
- };
- for (int i = 0; i < 7; i++)
- {
- //参数1 数据地址 参数2 块大小 参数3 块个数 参数4 文件指针
- fwrite(&heros[i], sizeof(struct Hero), 1, f_wirte);
- }
- fclose(f_wirte);
- //读文件
- FILE* f_read = fopen("./test3.txt", "rb");
- if (f_read == NULL)
- {
- return;
- }
- struct Hero temp[7];
- fread(&temp, sizeof(struct Hero), 7, f_read);
- for (int i = 0; i < 7; i++)
- {
- printf("姓名%s:年龄:%d\n",temp[i].name,temp[i].age);
- }
- fclose(f_read);
- }
- int main(void)
- {
- test01();
- return EXIT_SUCCESS;
- }
复制代码
文件操作--按格式化读写
- void test01()
- {
- //格式化读写
- //写文件
- FILE* f_write = fopen("./test4.txt", "w");
- if (f_write == NULL)
- {
- return;
- }
- fprintf(f_write, "hello worid %s", "abcdof");
- fclose(f_write);
- //读文件
- FILE* f_read = fopen("./test4.txt", "r");
- if (f_read == NULL)
- {
- return;
- }
- char temp[1024] = { 0 };
- while (!feof(f_read))
- {
- fscanf(f_read, "%s", temp);
- printf("%s \n", temp);
- }
- fclose(f_read);
- }
- int main(void)
- {
- test01();
- return EXIT_SUCCESS;
- }
复制代码
文件操作--随机位置读写
- //写文件
- struct Hero
- {
- char name[64];
- int age;
- };
- void test01()
- {
- //写文件
- FILE* f_wirte = fopen("./test5.txt", "wb");
- if (f_wirte == NULL)
- {
- return;
- }
- struct Hero heros[] =
- {
- {"孙悟空",999},
- {"鲁班",10},
- {"曹操",20},
- {"程咬金",30},
- {"貂蝉",40},
- {"赵云",50},
- {"妲己",60},
- };
- for (int i = 0; i < 7; i++)
- {
- //参数1 数据地址 参数2 块大小 参数3 块个数 参数4 文件指针
- fwrite(&heros[i], sizeof(struct Hero), 1, f_wirte);
- }
- fclose(f_wirte);
- //读文件
- FILE* f_read = fopen("./test5.txt", "rb");
- if (f_read == NULL)
- {
- return;
- }
- struct Hero tempHero;
- //移动光标
- //参数1 文件指针 参数2 移动大小 参数3 起始位置
- //seek_set 从开始 seek_end 从结尾 seek_cur从当前位置
- fseek(f_read, sizeof(struct Hero) * 2, SEEK_SET);
- //从结尾EK_END开始读取数据 -(long)强转才可以
- fseek(f_read, -(long)sizeof(struct Hero) * 2, SEEK_END);
- rewind(f_read); //将文件光标置首
- fread(&tempHero, sizeof(struct Hero), 1, f_read);
- printf("姓名: %s 年龄: %d \n", tempHero.name, tempHero.age);
- fclose(f_read);
- }
- int main(void)
- {
- test01();
- return EXIT_SUCCESS;
- }
复制代码
r 打开一个已有的文本文件,允许读取文件。
w 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。
a 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
r+ 打开一个文本文件,允许读写文件。
w+ 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
a+ 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。
如果处理的是二进制文件,则需使用下面的访问模式来取代上面的访问模式:
"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"
关闭文件 请使用 fclose( ) 函数 |
上一篇: c语言学习之路的点滴记录--结构体的基本使用下一篇: c学习之路的点滴记录——静态与动态链表
|