• c语言(看一遍就会操作,小马教一步步教你如何文件操作)


    前言:

          ^ _ ^文件操作想必大家掌握的并不熟练,确实因为我们用的并不多,而本节内容能够让大家初步认识文件操作,从文件认识到文件使用,让我们对c语言文件操作有个初步的了解,在应用中可以看我用文件的形式完成一个通讯录

     

    思维导图: 

    目录

    一、文件操作:

     1、 为什要使用文件操作:

    2、什么是文件:

    3、文件操作的使用:

         3.1文件操作的打开和关闭:

      3.2文件使用方式为:

     3.3文件的顺序读写: 

    3.4文件的随机读写:

    总结:


     

    一、文件操作

     1、 为什要使用文件操作:

            在c语言中我们完成一个程序后,他并不会对我们的数据进行保存,就像我上一篇文章中实现一个通讯录人员的增删插改中数据只是短暂的保存,而当程序退出后的同时人员信息也就销毁了,在此执行程序的时候人员信息并没有保存,而这是为什呢是因为我们执行程序时我们写的代码信息数据不是持久化的,而要让他持久化就要用到文件操作,将我们写的数据存到文件中,而文件信息是存放到硬盘当中的,这样就达到了信息的持久化,也就在此使用时信息还是进行了一个保存。

    2、什么是文件:

       2.1概念:

         存放在磁盘的文件就是文件。文件分为两种:数据文件,程序文件

    2.1.1程序文件:

        包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境 后缀为.exe)。

    2.1.2数据文件:

        文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件, 或者输出内容的文件。

    2.2文件名:

    一个文件要有一个唯一的文件标识,以便用户识别和引用。

    文件名包含3部分:文件路径+文件名主干+文件后缀

    例如: c:\code\test.txt 为了方便起见,文件标识常被称为文件名。

    3、文件操作的使用:

         3.1文件操作的打开和关闭:

        文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。 在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指 针和文件的关系。
    ANSIC 规定使用fopen函数来打开文件,fclose来关闭文件。  
    1. #include
    2. #include
    3. #include
    4. int main()
    5. {
    6. FILE*p=fopen("Contact.txt","w"); //打开文件输入文件地址,和打开方式
    7. if(p==NULL) //如果传入空指针则会报错
    8. {
    9. printf("%s", strerror(errno));
    10. }
    11. fclose(p); //关闭文件
    12. p=NULL; //防止变为野指针
    13. return 0;
    14. }

     3.2文件使用方式为:

    3.3文件的顺序读写: 

    3.3.1fputc:

    1. #include
    2. #include
    3. #include
    4. int main()
    5. {
    6. FILE*p=fopen("Contact.txt","w");
    7. if(p==NULL)
    8. {
    9. printf("%s", strerror(errno));
    10. }
    11. for(char i='a';i<'z';i++)
    12. {
    13. fputc(i,p); //像文件中写入数据,写入的是单个字节
    14. }
    15. fclose(p);
    16. p=NULL;
    17. return 0;
    18. }

     3.3.2 fgetc:

    1. #include
    2. #include
    3. #include
    4. int main()
    5. {
    6. FILE*p=fopen("Contact.txt","r");
    7. if(p==NULL)
    8. {
    9. printf("%s", strerror(errno));
    10. }
    11. for(char i='a';i<'z';i++)
    12. {
    13. printf("%c ",fgetc(p)); //从文件中获得数据打印出来
    14. }
    15. fclose(p);
    16. p=NULL;
    17. return 0;
    18. }

    3.3.3 fputs:

    1. #include
    2. #include
    3. #include
    4. int main()
    5. {
    6. FILE*p=fopen("Contact.txt","w");//写入文件数据用w,读取数据用r
    7. if(p==NULL)
    8. {
    9. printf("%s", strerror(errno));
    10. }
    11. fputs("hello world ",p); //向代码中写入字符串
    12. fclose(p);
    13. p=NULL;
    14. return 0;
    15. }

    3.3.4fgets:

    1. #include
    2. #include
    3. #include
    4. int main()
    5. {
    6. FILE*p=fopen("Contact.txt","r");//写入文件数据用w,读取数据用r
    7. if(p==NULL)
    8. {
    9. printf("%s", strerror(errno));
    10. }
    11. char arr[20]={0};
    12. fgets(arr,15,p);
    13. printf("%s\n",arr);
    14. fclose(p);
    15. p=NULL;
    16. return 0;
    17. }

    3.3.5fprintf:

    1. #include
    2. #include
    3. #include
    4. int main()
    5. {
    6. FILE*p=fopen("Contact.txt","w");//写入文件数据用w,读取数据用r
    7. if(p==NULL)
    8. {
    9. printf("%s", strerror(errno));
    10. }
    11. char arr[20]={"hello xiaoma"};
    12. fprintf(p,"%s",arr);
    13. fclose(p);
    14. p=NULL;
    15. return 0;
    16. }

    3.3.5fscanf:

    1. #include
    2. #include
    3. #include
    4. int main()
    5. {
    6. FILE*p=fopen("Contact.txt","r");//写入文件数据用w,读取数据用r
    7. if(p==NULL)
    8. {
    9. printf("%s", strerror(errno));
    10. }
    11. char arr[20]={0};
    12. fscanf(p,"%s",arr);
    13. printf("%s\n",arr);
    14. fclose(p);
    15. p=NULL;
    16. return 0;
    17. }

    3.3.6fwrite:

    1. #include
    2. #include
    3. #include
    4. int main()
    5. {
    6. FILE*p=fopen("Contact.txt","wb");//写入文件数据用w,读取数据用r wb是以二进制的方式写,rb是以二进制的方式读
    7. if(p==NULL)
    8. {
    9. printf("%s", strerror(errno));
    10. }
    11. char arr[20]={"hello world"};
    12. for(int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
    13. {
    14. fwrite(arr+i,sizeof(arr[0]),1,p); //一次写入一个元素,写入类型为char型
    15. }
    16. fclose(p);
    17. p=NULL;
    18. return 0;
    19. }

    3.3.7fread:

    1. #include
    2. #include
    3. #include
    4. int main()
    5. {
    6. FILE*p=fopen("Contact.txt","rb");//写入文件数据用w,读取数据用r wb是以二进制的方式写,rb是以二进制的方式读
    7. if(p==NULL)
    8. {
    9. printf("%s", strerror(errno));
    10. }
    11. char arr[20]={0};
    12. fread(arr,sizeof(arr),1,p);
    13. printf("%s\n",arr);
    14. fclose(p);
    15. p=NULL;
    16. return 0;
    17. }

    3.4文件的随机读写:

    3.4.1fseek:

      根据文件指针的位置和偏移量来定位文件指针

    1. #include
    2. #include
    3. #include
    4. int main()
    5. {
    6. FILE*p=fopen("/Users/mamenghao/Desktop/Contact.txt","rb");//写入文件数据用w,读取数据用r wb是以二进制的方式写,rb是以二进制的方式读
    7. if(p==NULL)
    8. {
    9. printf("%s", strerror(errno));
    10. }
    11. fseek(p,2,SEEK_SET); //SEEK_SET 偏移量从头开始
    12. // SEEK_CUR 偏移量从你上一次的位置开始
    13. // SEEK_END //偏移量从尾开始
    14. int ch =fgetc(p);
    15. printf("%c ",ch);
    16. fclose(p);
    17. p=NULL;
    18. return 0;
    19. }

    3.4.2ftell:

    返回文件指针相对于起始位置的偏移量
    1. #include
    2. #include
    3. #include
    4. int main()
    5. {
    6. FILE*p=fopen("/Users/mamenghao/Desktop/Contact.txt","rb");//写入文件数据用w,读取数据用r wb是以二进制的方式写,rb是以二进制的方式读
    7. if(p==NULL)
    8. {
    9. printf("%s", strerror(errno));
    10. }
    11. fseek(p,2,SEEK_SET); //SEEK_SET 偏移量从头开始
    12. // SEEK_CUR 偏移量从你上一次的位置开始
    13. // SEEK_END //偏移量从尾开始
    14. printf("%ld\n",ftell(p)); //这就打印了当前偏移量
    15. int ch =fgetc(p);
    16. printf("%c ",ch);
    17. fclose(p);
    18. p=NULL;
    19. return 0;
    20. }

    3.4.3rewind:

    让文件指针的位置回到文件起始位置

    1. #include
    2. #include
    3. #include
    4. int main()
    5. {
    6. FILE*p=fopen("/Users/mamenghao/Desktop/Contact.txt","rb");//写入文件数据用w,读取数据用r wb是以二进制的方式写,rb是以二进制的方式读
    7. if(p==NULL)
    8. {
    9. printf("%s", strerror(errno));
    10. }
    11. fseek(p,2,SEEK_SET); //SEEK_SET 偏移量从头开始
    12. // SEEK_CUR 偏移量从你上一次的位置开始
    13. // SEEK_END //偏移量从尾开始
    14. printf("%ld\n",ftell(p)); //这就打印了当前偏移量
    15. rewind(p); //使偏移量回到了起始位置
    16. printf("%ld\n",ftell(p)); //在次打印偏移量的位置来确定是否回到起始位置
    17. int ch =fgetc(p);
    18. printf("%c ",ch);
    19. fclose(p);
    20. p=NULL;
    21. return 0;
    22. }

    总结:

            对于文件操作并不是特别难,主要是我们对于文件操作不习惯的原因,让我们觉得文件操作很难,只要我么熟悉掌握fputc fgetc fputs fgets fprintf fscanf fwrite fread 这些函数的使用方法,文件操作也就容易理解啦,主要是在于操作,我们可以在下面把每一个都操作一下!!!

    ^ _ ^最后,孩子码文不易,如果觉得文章有帮助的话请多多支持呀!!!!😜

  • 相关阅读:
    Java关键字、转义字符与运算符优先级
    三天入门Redis【快速浏览版】
    c++ virtual base class
    【笔记】原型和原型链(持续完善)
    keepalived 主备都存在vip, keepalived主备跨网段配置;keepalived主备服务器不在同一个网段怎么配置
    Mac 微信定制化快捷键【截屏、标记、添加文字不再是问题】
    【Python百日进阶-WEB开发】Day174 - Django案例:06用户注册后端逻辑
    贪心算法
    Apache Doris 系列: 基础篇-Flink DataStream 读写Doris
    【C++技能树】手撕AVL树 --插入与旋转详解
  • 原文地址:https://blog.csdn.net/m0_63177573/article/details/127887572