最近训练营出一个作业叫我们用c语言做一个关于学生信息管理系统,要有增删查改功能。
自然要用到文件管理
然而这里就有很多坑了,接连踩得我心慌。
首先是打开模式:
"r" 以只读方式打开文件
"w" 以只写方式打开文件
"a" 以追加方式打开文件
"r+" 以读/写方式打开文件,如无文件出错
"w+" 以读/写方式打开文件,如无文件生成新文件
然后看到介绍,我就想直接用w+模式fopen一次然后就进行增删查改功能,然后发现保存是可以的,但第二次打开的时候我的文件的内容就被清空掉了。后来才搞懂输入输出是要分开的,所以只好在每个功能都自己用特定的模式fopen,比如增加用a模式,查看用r模式。
然后我发现fread和fwrite对于要输入输出结构体来说还是很好用的。
如:
while(fread(&mystudent,sizeof(struct student),1,fp)==1)
{
printf("|%d\t|%s\t|%s\t|%.2f\t |%.2f\t |\n",mystudent.num,mystudent.name,mystudent.gender,mystudent.LLgrade,mystudent.ZBgrade);
}
这样就可以遍历输出文件中的student结构体啦。
fwrite(&mystudent,sizeof(struct student),1,fp2)
写入也是很方便的,直接把整个结构体扔进去就好了。
还有修改文件内容的话,采用的是新建一个temp文件,然后读取原文件非指定的内容,写进temp,然后指定内容的话按照修改后写进temp,最后删除原来的文件,将temp改名为原来的文件名。
(fp=fopen("student.txt","r+");
(fp2=fopen("temp.txt","w+");
fclose(fp);
fclose(fp2);
remove("student.txt");
rename("temp.txt","student.txt");
注意:一定要先close才能remove和rename。
做这个作业时文件操作遇到到坑就这些,以后遇到再进行补充。