【C语言】手把手教你文件操作

news/2024/11/9 10:05:29/

文章目录

  • 一、前言
  • 二、文件的打开和关闭
    • 1. fopen函数
    • 2. fclose函数
  • 三、文件的顺序读写
  • 四、文件的随机读写
    • 1. fseek函数
    • 2. ftell函数
    • 3. fwind函数

一、前言

程序运行时,数据存放在内存中,而当程序退出后,数据也就不复存在。
想做到数据持久化,我们可以把数据存放在磁盘,或者放到数据库里。
而在C语言中,利用文件操作,就可以将数据存放在电脑的硬盘上。

程序设计中,文件一般分两种:程序文件、数据文件。

  • 程序文件
    • 源文件(.c)
    • 目标文件(windows环境后缀为.obj)
    • 可执行文件(windows环境后缀为.exe)
  • 数据文件
    • 程序运行时,要从中读写数据的文件。

二、文件的打开和关闭

读写之前应该先打开文件,使用结束之后要关闭文件。

1. fopen函数

FILE * fopen ( const char * filename, const char * mode );
  • fopen函数用于打开文件。
  • filename是要打开的文件名,mode是文件的使用方式。
  • FILE是描述文件信息的结构体类型,在头文件stdio.h中定义
  • 打开文件后,函数返回FILE*类型的文件指针。

需要注意,在字符串中表示\时,必须使用转义字符\\
所以filename应该如下图所示:
在这里插入图片描述
文件名由文件路径、文件名主干和文件后缀三个部分组成。
例如对于E:\test.txt来说:

  • E:\是文件路径
  • test是文件名主干
  • .txt是文件后缀

如果filename中省略文件路径,只写文件名主干和文件后缀的话,文件会默认保存在本工程的目录下。
在这里插入图片描述
文件的使用方式有以下这些:
在这里插入图片描述

  • 文本文件是指以ASCII码形式存储的文件,每个字符占1个字节。
    • 如10000这个数据以文本文件形式存储,那么每个数字看作一个字符,总共占5个字节。
  • 二进制文件是指数据以二进制形式存储的文件。
    • 如10000这个数据以二进制文件形式存储,那么只需将10000转换成二进制存入内存中就行了。

2. fclose函数

int fclose ( FILE * stream );
  • fclose函数用于关闭文件。
  • stream是要关闭的文件的文件指针。
  • fclose函数关闭文件后不会置空文件指针,需手动置空。

三、文件的顺序读写

C语言提供了一系列文件输入输出函数。
在这里插入图片描述
注意,这里的输入是从文件中读内容,输出是往文件里写内容
每个函数的具体用法可以查阅文档学习。

四、文件的随机读写

1. fseek函数

int fseek ( FILE * stream, long int offset, int origin );
  • 文件在读写时,文件指针指向的位置是会随着读写而改变的。
  • fseek函数可以用于将文件指针定位到我们想要的位置。
  • stream是文件指针,offset是我们想要设置的文件指针的偏移量。
  • origin是从哪里开始偏移,我们可以设置为SEEK_SET(文件起始位置)、SEEK_CUR(文件指针当前位置)、SEEK_END(末尾)。

2. ftell函数

long int ftell ( FILE * stream );
  • 该函数用于返回文件指针相对于起始位置的偏移量。
  • 我们可以利用ftell函数来获取文件指针当前的位置。

3. fwind函数

void rewind ( FILE * stream );
  • 该函数用于让文件指针回到文件的起始位置。

http://www.ppmy.cn/news/67876.html

相关文章

发现一个国产BI软件,做财务数据分析效果绝了

如果是一般的财务数据分析,BI软件们都能做,但如果真要深入了解财务痛点,逐个击破财务数据分析难点,实现多维立体自助式的财务数据分析,那就难。就目前而言,财务数据分析做得好的国产BI软件也就一个奥威BI软…

Flask小知识点

1、Flask 组成:werkzueg(专门用来处理请求相关URL) jinja2(用来渲染模板页面) 其他扩展包(flask-cache) 2、自定义转换器 #重写父类BaseConverter class MyRegexConverter(BaseConverter):# regex \d{3}def __init__(self, map, regex):super(MyRegexConverte…

SM2 椭圆曲线公钥密码算法(附源码分析)

一、前言 Koblitz与Miller分别于1985年各自独立地将椭圆曲线应用于公钥密码系统。椭圆曲线有如下性质: 有限域上椭圆曲线在点加运算下构成有限交换群,且阶与基域规模相近;类似于有限域乘法群的乘幂运算,椭圆曲线多倍点运算构成一个单向函数。本文要介绍的SM2算法即为一种椭…

测试自动化工具_Katalon

测试自动化_Katalon 1.概述 ​ Katalon界面的自动化测试工具,简称KS,于2015年推出。是开源的,提供的版本有免费的版本,还有企业版是收费的。如下图。其中的服务台功能应该是持续继承的支持。可试用一个月。 ​ 最初是支持Web UI…

Parker派克伺服电机有哪些优势特点?如何选型?

一、什么是伺服电机? 伺服电机是一种可以通过控制器精确地控制位置、速度和加速度的电机,主要由电机、编码器和控制器三部分组成,具有高转矩、高精度、快速响应和低转速稳定特性,能够在负载扰动、电压变化及机械特性变化下保持较…

OpenCL编程指南-3.2OpenCL上下文

OpenCL上下文 上下文是所有OpenCL应用的核心。上下文为关联的设备、内存对象(例如,缓冲区和图像)以及命令队列(在上下文和各设备之间提供一个接口)提供了一个容器。正是上下文驱动着应用程序与特定设备以及特定设备之…

蓝奥声智能灯控解决方案:一种无线单火取电控制技术

单火开关出现鬼火现象一般是出现在控制小功率灯具的情况下,正常的5W之上的灯具一般是没啥问题的(质量差的除外)。就现在来说,单火稳定性与零火版相比还是有所欠缺,毕竟从电路原理上来说,这确实是一个硬伤。…

泰克RSA306B频谱分析仪测试信道功率方法

泰克RSA306B实时频谱分析仪是一种用于无线信号分析的仪器。它可以实时监控无线信号的频谱,帮助用户分析信号特征,掌握信号的功率、频率、调制等关键信息。在无线通信中,信道功率是一个非常重要的指标,它反映了信号在传输过程中的强…