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

news2024/12/23 17:24:25

前言:

      ^ _ ^文件操作想必大家掌握的并不熟练,确实因为我们用的并不多,而本节内容能够让大家初步认识文件操作,从文件认识到文件使用,让我们对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来关闭文件。  
#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("Contact.txt","w"); //打开文件输入文件地址,和打开方式
    if(p==NULL) //如果传入空指针则会报错
    {
        printf("%s", strerror(errno));
    }
    fclose(p); //关闭文件
    p=NULL;  //防止变为野指针
    return 0;
}

 3.2文件使用方式为:

3.3文件的顺序读写: 

3.3.1fputc:


#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("Contact.txt","w");
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }
    for(char i='a';i<'z';i++)
    {
        fputc(i,p);  //像文件中写入数据,写入的是单个字节
    }
    
    fclose(p);
    p=NULL;
    return 0;
}

 3.3.2 fgetc:

#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("Contact.txt","r");
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }
    for(char i='a';i<'z';i++)
    {
        printf("%c ",fgetc(p)); //从文件中获得数据打印出来
    }
    
    fclose(p);
    p=NULL;
    return 0;
}

3.3.3 fputs:

#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("Contact.txt","w");//写入文件数据用w,读取数据用r
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }

    fputs("hello world ",p); //向代码中写入字符串
    
    fclose(p);
    p=NULL;
    return 0;
}

3.3.4fgets:

#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("Contact.txt","r");//写入文件数据用w,读取数据用r
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }

    char arr[20]={0};
    fgets(arr,15,p);
         printf("%s\n",arr);
    
    fclose(p);
    p=NULL;
    return 0;
}

3.3.5fprintf:

#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("Contact.txt","w");//写入文件数据用w,读取数据用r
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }

    char arr[20]={"hello xiaoma"};
    fprintf(p,"%s",arr);
    
    
    fclose(p);
    p=NULL;
    return 0;
}

3.3.5fscanf:

#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("Contact.txt","r");//写入文件数据用w,读取数据用r
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }

   char arr[20]={0};
    fscanf(p,"%s",arr);
    printf("%s\n",arr);
    
    
    fclose(p);
    p=NULL;
    return 0;
}

3.3.6fwrite:

#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("Contact.txt","wb");//写入文件数据用w,读取数据用r wb是以二进制的方式写,rb是以二进制的方式读
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }

    char arr[20]={"hello world"};
    for(int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
    {
    fwrite(arr+i,sizeof(arr[0]),1,p); //一次写入一个元素,写入类型为char型
    }
    
    fclose(p);
    p=NULL;
    return 0;
}

3.3.7fread:

#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("Contact.txt","rb");//写入文件数据用w,读取数据用r wb是以二进制的方式写,rb是以二进制的方式读
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }
    char arr[20]={0};
    fread(arr,sizeof(arr),1,p);
    printf("%s\n",arr);
    fclose(p);
    p=NULL;
    return 0;
}

3.4文件的随机读写:

3.4.1fseek:

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


#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("/Users/mamenghao/Desktop/Contact.txt","rb");//写入文件数据用w,读取数据用r wb是以二进制的方式写,rb是以二进制的方式读
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }
    fseek(p,2,SEEK_SET);  //SEEK_SET 偏移量从头开始
                           // SEEK_CUR 偏移量从你上一次的位置开始
                           // SEEK_END //偏移量从尾开始
    int ch =fgetc(p);
    printf("%c ",ch);
     fclose(p);
    p=NULL;
    return 0;
}

3.4.2ftell:

返回文件指针相对于起始位置的偏移量
#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("/Users/mamenghao/Desktop/Contact.txt","rb");//写入文件数据用w,读取数据用r wb是以二进制的方式写,rb是以二进制的方式读
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }
    fseek(p,2,SEEK_SET);  //SEEK_SET 偏移量从头开始
                        // SEEK_CUR 偏移量从你上一次的位置开始
                           // SEEK_END //偏移量从尾开始
    printf("%ld\n",ftell(p)); //这就打印了当前偏移量
    int ch =fgetc(p);
    printf("%c ",ch);
     fclose(p);
    p=NULL;
    return 0;
}

3.4.3rewind:

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

#include <stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
    FILE*p=fopen("/Users/mamenghao/Desktop/Contact.txt","rb");//写入文件数据用w,读取数据用r wb是以二进制的方式写,rb是以二进制的方式读
    if(p==NULL)
    {
        printf("%s", strerror(errno));
    }
    fseek(p,2,SEEK_SET);  //SEEK_SET 偏移量从头开始
                        // SEEK_CUR 偏移量从你上一次的位置开始
                           // SEEK_END //偏移量从尾开始
    printf("%ld\n",ftell(p)); //这就打印了当前偏移量
    rewind(p); //使偏移量回到了起始位置
    printf("%ld\n",ftell(p)); //在次打印偏移量的位置来确定是否回到起始位置
    int ch =fgetc(p);
    printf("%c ",ch);
     fclose(p);
    p=NULL;
    return 0;
}

总结:

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/12063.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java爬虫破解滑块验证码

使用技术&#xff1a;javaSelenium 废话&#xff1a; 有爬虫&#xff0c;自然就有反爬虫&#xff0c;就像病毒和杀毒软件一样&#xff0c;有攻就有防&#xff0c;两者彼此推进发展。而目前最流行的反爬技术验证码&#xff0c;为了防止爬虫自动注册&#xff0c;批量生成垃圾账号…

三菱FX系列控制脉冲伺服--DDRVA、DZRN、 ALTP、D8340、DPLSY指令的使用

一&#xff1a;文章主题 FX系列控制轴最常用的是脉冲控制的方式。本文基于实际开发案例&#xff0c;讲解三菱FX系列的运动控制指令&#xff0c;基于该文章能清楚指导通过脉冲控制伺服的基本原理和程序思路。 二&#xff1a;运动控制指令 2.1、DDRVA指令使用 1、DDRVA定义&#…

zabbix 自动发现与自动注册(接上章补充)

一、zabbix 自动发现 server CentOS7.6 192.168.130.70 / client CentOS7.6 192.168.130.10 / proxy CentOS7.6 192.168.130.60 / 1.zabbix server 主动的去发现所有的客户端&#xff0c;然后将客户端的信息登记在服务端上。 缺点是如果定义的网段中的主机数量多&#xff0c;…

MQTT X 1.9.0 发布:开箱即用的 bench 命令,MQTT 性能测试更便捷

近日&#xff0c;MQTT 5.0 客户端工具 MQTT X 1.9.0 正式发布。 新版本针对桌面客户端优化了一些细节上的 UI 样式与交互方式&#xff0c;新增了一个可以帮助用户更加快速和系统学习 MQTT 协议相关知识的页面&#xff0c;同时也修复了一些已知问题&#xff1b;针对命令行客户端…

c++基础(十七)——职工管理系统实现

一、项目的创建 打开visual studio之后&#xff0c;选择文件—新建—项目。出现弹窗后选择Visual C,填好名称即可。 接下来分别在对应的位置创建头文件以及源文件以及一个主函数文件"职工管理系统.cpp"&#xff1a; 二、系统界面的基本实现&#xff1a; 在头文件…

Qt音视频开发03-ffmpeg倍速播放(半倍速/2倍速/4倍速/8倍速)

一、前言 用ffmpeg做倍速播放&#xff0c;是好多年都一直没有实现的功能&#xff0c;有个做法是根据倍速参数&#xff0c;不断切换播放位置&#xff0c;实现效果不是很好&#xff0c;ffplay中的倍速就做得很好&#xff0c;而且声音无论倍速多少还非常柔和&#xff0c;有特别的…

Vue实现网页首屏加载动画、页面内请求数据加载loading

博主介绍 &#x1f4e2;点击下列内容可跳转对应的界面&#xff0c;查看更多精彩内容&#xff01; &#x1f34e;主页&#xff1a;水香木鱼 &#x1f34d;专栏&#xff1a;后台管理系统 文章目录 简介&#xff1a;这是一篇有关【Vue实现网页首屏加载动画、页面内请求数据加载lo…

如何使用html、css制作一个期末作业网站【羽毛球体育运动主题html网页设计】

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

sulfo-CY3(Cyanine3) DBCO,磺酸基-花青素CY5二苯并环辛炔,1782950-79-1

中文名&#xff1a;磺酸基-花青素CY3二苯并环辛炔 英文名&#xff1a;Sulfo-Cyanine3 DBCO&#xff0c;Sulfo-Cy3 DBCO CAS&#xff1a;1782950-79-1 分子式&#xff1a;C50H54N4O11S3 性 状&#xff1a;红色粉末 分子量&#xff1a;983.18 Abs/Em Maxima&#xff1a;548/…

Hadoop单个节点的磁盘均衡

hadoop如果一个节点内有新增磁盘或者数据出现在磁盘上不均衡时&#xff0c;需要做磁盘均衡&#xff0c;就是将其他已经写入数据的磁盘均衡到新增加的磁盘上去&#xff0c;大概分为以下三个步骤&#xff0c;计划&#xff0c;执行&#xff0c;查询&#xff1a; 一般默认都开启了磁…

基于NodeJs+Express+Mysql学生社团活动管理系统

开发技术&#xff1a;nodejs express ElementUI layui 开发工具环境&#xff1a;Vscode Mysql 后台登录地址&#xff1a;http://localhost:8080/nodejsr08n1/admin/dist/index.html#/login 管理员账号密码&#xff1a;abo/abo 社团账号密码&#xff1a;账号1/123456 前台地…

JVM内存区域划分

哈喽,又是好久不见呀,今天主要要给大家分享的是JVM的内存区域划分,这个就是纯纯的八股文了呦,但是我依旧还是会尽我最大的努力给友友讲清楚的,快来看看吧. 目录 1.JVM快速扫盲 2.JDK、JRE、JVM的关系 3.JVM内存区域划分 3.1 堆 3.2 java虚拟机栈 3.3 本地方法栈 3.4 程序…

OpenCV学习-P44 角点检测

OpenCV学习-P44 角点检测角点特征Harris和Shi-Tomas算法Harris角点检测Shi-tomas角点检测角点特征 角点是图像很重要的特征&#xff0c;对图像图形的理解和分析有很重要的作用 Harris和Shi-Tomas算法 Harris角点检测 E最大的点即角点&#xff0c;矩阵M决定了E的取值 im…

信息系统项目管理师高级论文如何准备?

如果有项目经验&#xff0c;可以选一个&#xff0c;整理一下项目背景&#xff0c;内容等&#xff0c;使它符合考试的要求。 没有项目经验&#xff0c;就只能多看范文&#xff0c;总结框架&#xff0c;然后再动手写了。 所以&#xff0c;论文一定要提前准备。 2小时内要完成三…

HTML简单的网页制作期末作业【NBA勒布朗詹姆斯篮球明星】HTML+CSS+JavaScript

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

大一学生作品《前端框架开发技术》 期末网页制作 HTML+CSS+JavaScript 个人主页网页设计实例

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

UML类图

统一建模语言&#xff08;Unified Modeling Language&#xff0c;UML&#xff09;是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。 UML从目标系统的不同角度出发&#xff0c;可分为用例图、类图、对象图、状态图、活动图、…

实现一个全局事件总线并发布到NPM

前言 Vue2开发过程中&#xff0c;会碰到非父子组件情况&#xff0c;我们大多数会使用Vue提供的自定义实例来解决这个问题&#xff0c;但在Vue3之后就移除了$on/$off/$once/emit 相关API&#xff0c;不再提供自定义实例&#xff0c;而是推荐使用一些第三方库如mitt、tiny-emitt…

第3关:Client连接及状态

ZooKeeper状态以及状态的转换 一个会话从NOT_CONNECTED状态开始&#xff0c;当客户端初始化后转换成CONNECTTING状态&#xff08;箭头1&#xff09;。 当客服端与服务器断开连接&#xff0c;状态转换成CONNECTED状态&#xff08;箭头2&#xff09;。 当客服端与服务器断开连接…

基于xsh的vbs脚本的使用(语法)

一. chr(number)含义 chr(number) 对应列表链接&#xff1a;chr码值对应列表大全_conger3400的博客-CSDN博客 常用举例&#xff1a; chr(3)&#xff1a;CtrlC/退出等待某个执行命令 chr(4)&#xff1a;CtrlD/退出会话 chr(8)&#xff1a;del回退删除一个字符 chr(9)&#xff…