当前位置:   article > 正文

C语言文件操作总结_c语言写文件

c语言写文件

目录

字符方式读入文件

数据块方式读写文件

文件定位与随机读写

文件中数据的修改


字符方式读入文件

1.向文件中写入(输入字符)

        用 fputc 函数或 puts 函数可以把一个字符写到磁盘文件中去。

int fputc(int ch,FILE * fp)

        ch 是要输出的字符,他可以是一个字符常量,也可以是一个字符变量;fp是文件指针变量,已经指向了一个由fopen函数打开的文件。

        功能:fputc(ch,fp)函数将字符输入到fp所指向的流式文件中去。如果输出成功,返回值就是输入的字符,失败则返回EOF。

从键盘输入遗传字符,以回车符\n结束,然后输入到磁盘文件中去

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int main()
  4. {
  5. //从键盘输入遗传字符,以回车符\n结束,然后输入到磁盘文件中去
  6. FILE * fp;
  7. char ch;
  8. if((fp=fopen("output1.txt","w"))==NULL)
  9. {
  10. printf("无法创建文件!");
  11. exit(0);
  12. }
  13. while((ch=getchar())!='\n')
  14. {
  15. fputc(ch,fp);
  16. }
  17. fclose(fp);
  18. return 0;
  19. }

2.从文件中读出一个字符

        用 fgetc 函数或者 getc 函数可以从磁盘中读出一个字符。

int fgetc(FILE * fp)

        从磁盘文键逐个读入字符,并在终端输出

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int main()
  4. {
  5. //从磁盘文键逐个读入字符,并在终端输出
  6. FILE * fp;
  7. char ch;
  8. if((fp=fopen("output1.txt","r"))==NULL)
  9. {
  10. printf("无法打开文件!\n");
  11. exit(0);
  12. }
  13. while((ch=fgetc(fp))!=EOF)
  14. {
  15. putchar(ch);
  16. }
  17. fclose(fp);
  18. return 0;
  19. }

3.向文件中写入一个字符串

        用 fputs 函数可以把一个字符串输入到指定的流式文件中,其原型为

int fputs(char * fp,FILE * stream)

        其中,string为字符串,stream为文件指针。

 把指针string所指向的字符串输出到文件指针stream所指向的文件中,但字符串结束符‘\0’不输出

 从键盘输入若干行字符,把他们输出到磁盘文件中保存起来。

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int main()
  4. {
  5. //从键盘输入若干行字符,把他们输出到磁盘文件中保存起来。
  6. FILE * fp;
  7. char string[81];
  8. if((fp=fopen("data.txt","w"))==NULL)
  9. {
  10. printf("未找到此文件!");
  11. exit(0);
  12. }
  13. while(gets(string)!=NULL)//ctrl+Z结束
  14. {
  15. fputs(string,fp);
  16. fputc('\n',fp);//在每个字符串后加一个换行符
  17. }
  18. fclose(fp);
  19. return 0;
  20. }

数据块方式读写文件

使用数据块的方式对二进制问价进行读写操作,涉及的函数有两个:fread() 和 fwrite() 。

建立学生档案文件,每个记录包括学生的姓名,性别,年龄和入学总分 

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. struct student
  4. {
  5. char name[10];
  6. char sex;
  7. int age;
  8. float score;
  9. };
  10. int main()
  11. {
  12. FILE * fp;
  13. struct student stud;
  14. char str[80],ch='y';
  15. if((fp=fopen("stud2.rec","wb"))==NULL)//二进制只写方式打开
  16. {
  17. printf("无法打开文件!\n");
  18. exit(0);
  19. }
  20. while(ch=='y'||ch=='Y')
  21. {
  22. printf("输入姓名:");
  23. gets(stud.name);
  24. printf("输入性别:");
  25. gets(str);stud.sex=str[0];
  26. printf("输入年龄:");
  27. gets(str);stud.age=atoi(str);//年龄:将字符串转换为整型
  28. printf("输入分数:");
  29. gets(str);stud.score=atof(str);//分数:将字符串转换为浮点型
  30. fwrite(&stud,sizeof(stud),1,fp);//写入数据到文件
  31. do
  32. {
  33. printf("继续输入:(y/n)? ");
  34. gets(str);
  35. ch=str[0];
  36. } while(!(ch=='y'||ch=='n'||ch=='Y'||ch=='N'));
  37. }
  38. fclose(fp);
  39. return 0;
  40. }

从磁盘文件按记录读取数据,并显示读入的内容,直到文件尾

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. struct student
  4. {
  5. char name[10];
  6. char sex;//'M',或'F'
  7. int age;
  8. float score;
  9. };
  10. int main()
  11. {
  12. //从磁盘文件按记录读取数据,并显示读入的内容,直到文件尾
  13. struct student stud;
  14. FILE * fp;
  15. if((fp=fopen("stud2.rec","rb"))==NULL)
  16. {
  17. printf("无法打开文件stud2.rec!\n");
  18. exit(0);
  19. }
  20. while(fread(&stud,sizeof(stud),1,fp)==1)
  21. {
  22. printf("\n姓名:%s",stud.name);
  23. printf("\n性别:%c",stud.sex);
  24. printf("\n年龄:%d",stud.age);
  25. printf("\n分数:%.2f",stud.score);
  26. }
  27. printf("\n");
  28. fclose(fp);
  29. return 0;
  30. }

文件定位与随机读写

文件的定位:利用fesk()和ftell()函数编写程序测量一个文件的长度 

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. //文件的定位
  4. //利用fesk()和ftell()函数编写程序测量一个文件的长度
  5. long filesize(FILE * fp)
  6. {
  7. long curpos,length;//当前文件读写位置指针相当于文件开头的位移量
  8. curpos=ftell(fp);//保存文件的当前读写位置指针
  9. fseek(fp,0L,SEEK_END);//文件读写位置指针置于文件尾端
  10. length=ftell(fp);//求文件长度
  11. fseek(fp,curpos,SEEK_SET);//恢复文件的原读写位置的指针
  12. return length;
  13. }
  14. long filesize(FILE * stream);
  15. int main()
  16. {
  17. FILE * stream;
  18. char filename[10];
  19. printf("\n输入文件名:");
  20. scanf("%s",filename);
  21. if((stream=fopen(filename,"rb"))==NULL)
  22. {
  23. printf("无法打开文件:%s\n",filename);
  24. exit(0);
  25. }
  26. printf("%s的文件大小是%ld(byte)\n",filename,filesize(stream));
  27. fclose(stream);
  28. return 0;
  29. }

随机读写: 

由之前建立的学生入学档案的磁盘文件stud.rec中,假设学生按照分数升序排列。
现要求设计一个程序,输入一个整型值给n,输出分数最高的n个学生记录,即排在尾部的n个学生记录 

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. struct student
  4. {
  5. char name[10];
  6. char sex;//'M',或'F'
  7. int age;
  8. float score;
  9. };
  10. //由之前建立的学生入学档案的磁盘文件stud.rec中,假设学生按照分数升序排列。
  11. //现要求设计一个程序,输入一个整型值给n,输出分数最高的n个学生记录,即排在尾部的n个学生记录
  12. int main()
  13. {
  14. FILE * fp;
  15. struct student stud;
  16. int n;
  17. if((fp=fopen("stud.rec","rb"))==NULL)
  18. {
  19. printf("无法打开文件");
  20. exit(0);
  21. }
  22. printf("\n请输入一个整数:");
  23. scanf("%d",&n);
  24. fseek(fp,-n*sizeof(stud),SEEK_END); //定位到倒数第n个学生记录
  25. while(fread(&stud,sizeof(stud),1,fp)==1)
  26. {
  27. printf("\n姓名:%s",stud.name);
  28. printf("\n性别:%c",stud.sex);
  29. printf("\n年龄:%d",stud.age);
  30. printf("\n分数:%.2f",stud.score);
  31. }
  32. return 0;
  33. }

文件中数据的修改

将之前的成绩表中的女生成绩加五分

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. struct student
  4. {
  5. char name[10];
  6. char sex;//'M',或'F'
  7. int age;
  8. float score;
  9. };
  10. int main()
  11. {
  12. //从磁盘文件按记录读取数据,并显示读入的内容,直到文件尾
  13. struct student stud;
  14. FILE * fp;
  15. if((fp=fopen("stud.rec","rb"))==NULL)
  16. {
  17. printf("无法打开文件stud2.rec!\n");
  18. exit(0);
  19. }
  20. while(fread(&stud,sizeof(stud),1,fp)==1)
  21. {
  22. printf("\n姓名:%s",stud.name);
  23. printf("\n性别:%c",stud.sex);
  24. printf("\n年龄:%d",stud.age);
  25. printf("\n分数:%.2f",stud.score);
  26. }
  27. printf("\n");
  28. fclose(fp);
  29. return 0;
  30. }

输入一个学生的姓名,编写程序将stud.rec中该学生的记录删除 

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. struct student
  5. {
  6. char name[10];
  7. char sex;//'M',或'F'
  8. int age;
  9. float score;
  10. };
  11. //输入一个学生的姓名,编写程序将stud.rec中该学生的记录删除
  12. int main()
  13. {
  14. char name[10];
  15. FILE * fp_old,* fp_new;
  16. struct student stud;
  17. if((fp_old=fopen("stud.rec","rb"))==0)//读方式打开原数据文件
  18. {
  19. printf("\n不能打开文件");
  20. exit(0);
  21. }
  22. if((fp_new=fopen("stud3.rec","wb"))==0)//写方式创建新数据文件
  23. {
  24. printf("\n不能创建文件");
  25. exit(0);
  26. }
  27. printf("请输入要删除的学生姓名:");
  28. gets(name);
  29. while(fread(&stud,sizeof(stud),1,fp_old)==1)
  30. {
  31. //在原文件中读取一个学生记录在stud中
  32. if(strcmp(stud.name,name)!=0)
  33. {
  34. fwrite(&stud,sizeof(stud),1,fp_new);
  35. }
  36. }
  37. fclose(fp_old);
  38. fclose(fp_new);
  39. remove("stud.rec");//删除原文件
  40. rename("stud3.rec","stud.rec"); //将新文件重命名
  41. return 0;
  42. }

向文件中插入数据

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. struct student
  5. {
  6. char name[10];
  7. char sex;//'M',或'F'
  8. int age;
  9. float score;
  10. };
  11. int main()
  12. {
  13. FILE * fp;
  14. struct student x,t={
  15. "Alex",'f',20,566
  16. };
  17. if((fp=fopen("stud.rec","a+b"))==0)
  18. {
  19. printf("\n\t无法打开文件!\n");
  20. exit(0);
  21. }
  22. fread(&x,sizeof(struct student),1,fp);//从文件中读一条学生记录
  23. fseek(fp,0L,SEEK_END);
  24. fwrite(&t,sizeof(struct student),1,fp);//将t中的数据追加到文件尾
  25. rewind(fp);
  26. while(fread(&x,sizeof(struct student),1,fp)==1)
  27. {
  28. printf("\n%15s%4c%8d%8.2f",x.name,x.sex,x.age,x.score);
  29. }
  30. fclose(fp);
  31. return 0;
  32. }

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号