我的编程空间,编程开发者的网络收藏夹
学习永远不晚

一文搞懂C语言中的文件操作

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

一文搞懂C语言中的文件操作

一、文件操作

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.6fscanf:

#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.7fwrite:

#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.8fread:

#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 这些函数的使用方法,文件操作也就容易理解啦,主要是在于操作,我们可以在下面把每一个都操作一下!!!

到此这篇关于一文搞懂C语言中的文件操作的文章就介绍到这了,更多相关C语言文件操作内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

一文搞懂C语言中的文件操作

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

一文搞懂C语言中的文件操作

文件操作想必大家掌握的并不熟练,确实因为我们用的并不多,而本节内容能够让大家初步认识文件操作,从文件认识到文件使用,让我们对c语言文件操作有个初步的了解
2022-11-21

一文搞懂Go语言标准库strconv

strconv包实现了基本数据类型和其字符串表示的相互转换,本文主要介绍Go语言标准库strconv,想要学习strconv标准库的可以了解一下
2023-05-15

一文带你搞懂C语言动态内存管理

动态内存是指在堆上分配的内存,而静态内存是指在栈上分配的内存。本文将通过几个示例带大家深入了解一下C语言的动态内存管理,需要的可以参考一下
2022-11-13

一文带你搞懂Python中的pyc文件

Python是一门解释性语言,没有严格意义上的编译和汇编过程。Pyc文件是py编译过程中产生的字节码文件,可以由虚拟机直接执行,是python将目标源码编译成字节码以后在磁盘上的文件形式。本文就来聊聊pyc文件的写入等只是,感兴趣的可以了解一下
2022-12-28

一文带你搞懂C语言预处理宏定义

这篇文章主要为大家详细介绍了C语言预处理宏定义#define,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
2022-11-13

一文弄懂C语言EOF

在C语言中,EOF是一个宏定义,EOF常常用于文件的输入输出中,当读取到文件结束时,会返回EOF,本文就详细的介绍一下具体使用方法,感兴趣的可以一起来了解一下
2023-05-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录