iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >一文搞懂C语言中的文件操作
  • 815
分享到

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

C语言文件操作C语言 文件 2022-11-21 22:11:02 815人浏览 薄情痞子
摘要

目录一、文件操作1、 为什要使用文件操作2、什么是文件3、文件操作的使用一、文件操作 1、 为什要使用文件操作 在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语言文件操作内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 一文搞懂C语言中的文件操作

本文链接: https://www.lsjlt.com/news/173304.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 一文搞懂C语言中的文件操作
    目录一、文件操作1、 为什要使用文件操作2、什么是文件3、文件操作的使用一、文件操作 1、 为什要使用文件操作 在c语言中我们完成一个程序后,他并不会对我们的数据进行保存,就像我上一...
    99+
    2022-11-21
    C语言文件操作 C语言 文件
  • 一文搞懂Go语言操作Redis的方法
    目录前言安装依赖包连接Redisredis连接池总结前言 Redis是一个开源的内存数据库,在项目开发中redis的使用也比较频繁,本文介绍了Go语言中go-redis库的基本使用。感兴趣的小伙伴们可以参考借鉴,希望对大...
    99+
    2022-09-06
  • 一文搞懂Python的文件路径操作
    如果你要在代码里读取一个文件,那么你首先要知道这个文件的路径。如果只有一个文件,那么很简单,直接复制这个文件所在的文件夹路径及其文件名即可。而在很多情况下,我们会处理大量的文件,这些文件一般都会按一定...
    99+
    2023-08-31
    python linux windows
  • 一文搞懂C语言static关键字的三个作用
    目录static修饰局部变量static 修饰全局变量static 修饰函数总结static修饰局部变量 图一:test 函数里面定义的 a 是局部变量,局部变量在栈区上开辟空...
    99+
    2022-11-13
  • 一文搞懂Go语言中条件语句的使用
    目录if语句if...else 语句if 语句嵌套switch 语句Type Switchfallthroughselect 语句条件语句需要开发者通过指定一个或多个条件,...
    99+
    2022-11-13
  • 一文搞懂Go语言中文件的读写与创建
    目录1. 文件的打开与关闭1.1 os.open1.2 os.OpenFile() 指定模式打开文件2. 文件的读取2.1 打开文件的方式读取文件中的数据2.2 使用 bufio 整...
    99+
    2022-11-13
  • 一篇文章搞懂Go语言中的Context
    目录0 前置知识sync.WaitGroup1 简介2 context.Context引入3 context包的其他常用函数3.1 context.Background和contex...
    99+
    2022-11-13
  • 一文搞懂Go语言标准库strconv
    目录string与int类型转换Atoi()Itoa()Parse 系列函数ParseBool()ParseInt()、ParseUnit()ParseFloat()FormatBo...
    99+
    2023-05-15
    Go strconv
  • 一文带你搞懂C语言预处理宏定义
    目录预定义符号#define#define 定义标识符#define 定义宏替换规则# 和##预定义符号 这些预定义符号都是语言内置的 __FILE__ //进行编译的源文...
    99+
    2022-11-13
    C语言预处理宏定义 C语言 宏定义 C语言 预处理
  • 一文带你搞懂C语言动态内存管理
    目录一、malloc函数和free函数二、calloc函数与malloc函数的异同三、柔性数组一、malloc函数和free函数 (1) 这个函数向内存申请一块连续可用的空间,并返回...
    99+
    2022-11-13
    C语言动态内存管理 C语言 内存管理 C语言 内存
  • 一文弄懂C语言EOF
    目录文件的输入输出为什么要用EOFEOF和字符类型总结在 C语言中,EOF 是一个宏定义,它代表"end of file",表示文件结束标志。EOF 是一个特殊的...
    99+
    2023-05-20
    C语言EOF EOF宏
  • C语言文件操作详情(一)
    目录前言:一、文件是什么二、文件类型三、文件缓冲区四、文件指针五、文件的打开和关闭前言: 文件操作重要吗? 当然重要:如果我们想让自己的程序拥有记忆功能,那就需要把要记忆的信息和数据...
    99+
    2022-11-13
  • 一文搞懂C#实现读写文本文件中的数据
    【1】首先我们定义一段假数据,这里以一个string为例字   static void Main(string[] args) { string data = "我的数据要开始...
    99+
    2022-11-12
  • 一文搞懂c++中的std::move函数
    目录前言左值和右值左值引用右值引用std::move函数remove_reference源码剖析std::forward源码剖析std::move()源码剖析小结std::move使...
    99+
    2022-11-13
  • 一文搞懂Go语言中defer关键字的使用
    目录前言defer是什么多个defer的执行顺序延迟函数的参数在defer声明时就决定了defer和return的顺序defer和panicdefer下的函数参数包含子函数总结前言 ...
    99+
    2022-11-11
  • 一文带你搞懂Python中的pyc文件
    目录pyc 文件的触发pyc 文件的导入pyc 文件包含的内容pyc 文件的写入字节码混淆pyc 文件的触发 上一篇文章我们介绍了字节码,当时提到,py 文件在执行的时候会先被编译成...
    99+
    2022-12-28
    Python pyc文件写入 Python pyc文件 Python pyc
  • 一文搞懂C++多态的用法
    目录前言1.多态的概念2.C++中多态的分类(1)静态多态(2)动态多态3.多态的构成条件(1)举例(2)两个概念(3)多态的构成条件4.虚函数重写的两个例外(1)协变(2)析构函数...
    99+
    2022-11-13
  • 一文搞懂C++中的运算符重载
    目录引入一.运算符重载是什么二.运算符重载的格式三.部分运算符重载的实现3.1 简单‘ + ’ ‘ - ’ ‘ * &rs...
    99+
    2022-11-13
  • C语言中的文件操作详解
    目录1.为什么使用文件2.什么是文件2.1程序文件2.2数据文件2.3文件名3.文件的打开和关闭3.1文件指针3.2文件的打开和关闭4.文件的顺序读写5.文件的随机读写5.1fsee...
    99+
    2022-11-13
  • 一文搞懂Spring中的Bean作用域
    目录概述Singletonprototyperequestsessionapplication概述 scope用来声明容器中的对象所应该处的限定场景或者说该对象的存活时间,即容器在对...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作