一.文件概述
为什么要用到文件呢?
在编程中我们需要对数据进行录入,存储,修改,文件必不可少。
通常把数据从磁盘流到内存称为“读”,数据从内存流到磁盘称为“写”。
一.对于文件的操作我们需要知道如下知识:
- 文件的打开
- 文件的关闭
- 文件的读入
- 文件的写入
二.以上操作对应的函数:
1.fopen打开 2.fclose关闭 3.fread读入 4.fwrite写入
二.对应文件操作函数的说明
- 文件打开
fopen
FILE fopen(char *filename, char *mode)
filename
:文件名
mode
:打开文件的方式
注意:说到打开方式我们需要知道常用的文件打开模式:
<1>对于只写的模式:
<2>.对于只读的模式:
2.文件的关闭fclose
fclose(fp1);//fp1为文件名字
注意:每次打开一次文件,都需要执行关闭文件的函数
3.文件的读入fread
4.文件的写入write
三.文件样例实现
我们要求定义一个结构体用于存储学生的基本信息,将基本信息存储到文件名为test.txt
文件
中,对其进行访问或输出操作。
1.首先定义结构体:
struct student//结构体名student { char name[50];/*姓名*/ char num[25];/*学号*/ float s[2];/*两组成绩*/ }stu;//stu为结构体变量名
2.在主函数里的相关操作:
<1>.定义文件指针变量fp1
FILE *fp1;
定义方法:FILE *文件名
<2>.打开文件fp1
fp1=fopen("d:\\test.txt","wb");
<3>.判断文件fp1
是否打开成功
if(fp1==NULL) { printf("cannot open!"); exit(0); }
<2><3>联立可以写成:
if ((fp1 == fopen("d:\\test.txt", "wb") == NULL)) { printf("cannot open"); exit(0); }
<3>.关闭文件fp1
fclose(fp1);
<4>.写入文件fp1
fwrite(&stu,sizeof(stu),1,fp1);
<5>.读取文件fp1
fread(&stu,sizeof(stu),1,fp1);
代码演示:
#include<stdio.h> #include<stdlib.h> struct student//结构体名student { char name[50];/*姓名*/ char num[25];/*学号*/ float s[2];/*两组成绩*/ }stu; int main() { FILE *fp1;//定义文件指针 int i; fp1 = fopen("d:\\test.txt", "wb"); if (fp1 == NULL) { printf("cannot open"); exit(0); } printf("input from file:\n"); for (i = 0; i < 2; i++) { scanf("%s%s%f%f", stu.name, stu.num, &stu.s[0], &stu.s[1]); fwrite(&stu, sizeof(stu), 1, fp1); } fclose(fp1); if ((fp1 == fopen("d:\\test.txt", "rb") == NULL)) { printf("cannot open"); exit(0); } printf("output from file:\n"); for (i = 0; i < 2; i++) { fread(&stu, sizeof(stu), 1, fp1); printf("%s %s %7.2f %7.2f\n", stu.name, stu.num, stu.s[0], stu.s[1]); } fclose(fp1); return 0; }