【进阶C语言】文件操作

news2024/11/24 22:48:04

文章目录

  • 一.文件
    • 1.文件的功能
    • 2.文件的分类
    • 3.文件路径
      • 绝对路径
      • 相对路径
    • 4.文件信息区
    • 5.文件缓冲区
    • 6.流的概念
    • 7.输入输出
  • 二.文件函数
    • 1.打开与关闭文件
      • 打开文件——fopen
        • 返回类型
        • 参数
      • 关闭文件——fclose
        • 返回类型
        • 参数
    • 2. 顺序读写
      • 1.输入输出字符
          • 输入字符函数——fgetc
          • 返回类型
          • 函数参数
          • 输出字符函数——fputc
          • 返回类型
          • 函数参数
      • 2.输入输出字符串
          • 输入字符函数——fgets
          • 返回类型
          • 函数参数
          • 输出字符函数——fputs
          • 返回类型
          • 函数参数
      • 3.格式化输入输出
        • 格式化输入——fscanf
          • 返回类型
          • 函数参数
        • 格式化输出——fprintf
          • 返回类型
          • 函数参数
      • 4.二进制输入输出
        • 二进制输入——fwrite
          • 返回类型
          • 函数参数
        • 二进制输入——fread
          • 返回类型
          • 函数参数
    • 3.随机读写
      • 1.fseek
        • 返回类型
        • 参数
      • 2.ftell
        • 返回类型
        • 函数参数
      • 3.rewind
        • 返回类型
        • 函数参数
    • 4.错误函数
      • 1.ferror
        • 返回类型
        • 函数参数
      • 2.feof
        • 返回类型
        • 函数参数

一.文件

定义:
 文件属于文件的一种,与普通文件载体不同,文件是以硬盘为载体存储在计算机上的信息集合。文件包括了文档、图片、视频、程序组件等,每个类型的文件都有不同的作用或功用,例如一个程序通常由主程序、动态库、配置文件等组成,这些也是文件,起到支持程序运行的作用

文件包含三部分:
1.文件路径
2.文件后缀
3.文件名

1.文件的功能

 在写程序中,比如说我们写的通讯录,在运行结束时,通讯录的信息会被删除,那有没有方法来存储我们所需要的数据信息呢?答案是肯定的。数据被保存在硬盘中,那这样我们使数据具有了可持续化的属性。这是其中的一种功能.

2.文件的分类

在这里插入图片描述

终端:是我们最终要操作的对象。
比如说:使用printf和scanf函数时,printf的终端为屏幕,scanf的终端为键盘

3.文件路径

绝对路径

定义:
 绝对路径是指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。

比如说:D:\Program Files (x86)\Microsoft Visual Studio\2019这就是一个绝对路径
从起始盘开始到目标文件结束

相对路径

定义:
 相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。使用相对路径可以为我们带来非常多的便利。

比如:D:\Program Files (x86)\Microsoft Visual Studio\2019
如果你的文件在D:\Program Files (x86)\Microsoft Visual Studio里面则要打开2019
只需:2019
当前路径符号:.
当前路径的上一路径:…
以此类推:我们可以找到我们想要的文件

4.文件信息区

在这里插入图片描述

将目标文件的相关信息存放到结构体变量中,这样的变量我们称之为文件信息区
文件信息区的定义在:stdio.h  中。
文件信息区一般用指针进行操作,这里的文件指针指的可不只是文件。

下面这是VS2013的文件信息区的结构变量的命名

struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;

那指针就是FILE*(通常为文件操作函数的返回值)

5.文件缓冲区

在这里插入图片描述

在程序结束时,(VS2019)会主动刷新缓冲区,fclose函数也能主动刷新缓冲区,在没有刷新缓冲区时,数据是不会主动放在文件中的,所以通常在我们编辑文件时,我们通常会按下CTRL+S保存数据到文件中,这时我们就会刷新文件缓冲区,把数据放在文件中。

6.流的概念

 计算机中的流其实是一种信息的转换。是一种高度抽象的概念。
在这里插入图片描述

我们只需将所需的对目标对象根据分类写到流里面去,但是数据怎么到目标,这是怎么实现的我们并不需要了解,我们只需要知道如何使用即可,这大大简化了我们学习编程的门槛。
在打开程序的时候,默认打开三个流:
1.stdin(标准输入流)——键盘
2.stdout(标准输出流)——屏幕
3.stderr(标准错误流)

7.输入输出

在这里插入图片描述

二.文件函数

1.打开与关闭文件

打开文件——fopen

返回类型

FILE*的指针

打开失败时:返回一个空指针。
打开成功指向文件的起始地址。
一般来说要进行对返回值的检查

参数

1.文件路径——const char * filename
2.模式(以哪种形式打开)——const char*mode

打开的模式:
在这里插入图片描述
在这里插入图片描述

关闭文件——fclose

返回类型

int

打开成功:返回0
打开失败:返回EOF(-1)

参数

文件指针——FILE * stream

1.此函数会刷新缓冲区,相当于保存的作用
2.如果严谨的话对返回值也需要进行检查,不过通常都不用

2. 顺序读写

1.输入输出字符

 1. 输入输出字符函数适用于所有的流
 2.在读取字符之后,读取的内容的指针自动向后偏移一个字符的位置,读取下一个字节

输入字符函数——fgetc
返回类型

int

如果读取成功:将字符整形提升为整形返回
失败:返回EOF

函数参数

文件指针——FILE * stream

输出字符函数——fputc
返回类型

int

如果读取成功:将字符整形提升为整形返回
失败:返回EOF

函数参数

文件指针——FILE * stream

2.输入输出字符串

 1. 输入输出字符函数适用于所有的流

输入字符函数——fgets

读取时会为\0留一个字节的位置,所以想要读取的字符数与实际要读的少一

返回类型

char*

读取成功:返回str——与要存入字符数组的首元素的地址保持一致(不管读取多少个字节)。
读取失败:返回空指针

函数参数

1.要读取的字符串的首地址——char*str
2.要读取的字符的个数
3.文件指针——FILE * stream

输出字符函数——fputs

功能:将文件中的信息写到程序中
字符串的\0是不会被放在文件里面的
换行不会自动换行需要自己写\n

返回类型

int

如果读取成功:返回非负值
失败:返回EOF

函数参数

1.要读取的字符串的首元素的地址——const char *str
2.目标文件指针——FILE * stream

3.格式化输入输出

格式化输入——fscanf

(空白符:指空格符、制表符、回车符)就停止的输入函数
一般来说:使用gets函数来弥补这一缺陷

返回类型

int

成功:返回字符个数
比如:int ret = fscanf(pf, "%s “, arr);这里的ret 是 1跟字符串”"里面的字符个数有关
失败:返回EOF

函数参数

1.要读取的文件指针:FILE*stream
2.格式化字符串
3.输入列表

格式化输出——fprintf

功能:将数据转换成字符串存到文件中

返回类型

int

成功:返回读取字符个数
比如:int ret = fscanf(pf, "%s “, arr);这里的ret 是 1跟字符串”"里面的字符个数有关
失败:返回负数

函数参数

1.要写入的文件指针:FILE*stream
2.格式化字符串
3.输入列表

4.二进制输入输出

只能适用于文件流中

二进制输入——fwrite

功能:将数据转换成二进制写入文件中

返回类型

size_t

如果返回成功:返回的是成功写入的元素的个数
失败:返回0
一般来说:字符的二进制数据和文本数据是相同的,所以在文档中可以看懂字符,但是其它的数据可就不一定。

函数参数

1.写入文件的数据的地址——const void * ptr
2.写入数据的大小——size_t size
3.要写入的数据的个数——size_t count
4.写入的文件指针——FILE * stream

二进制输入——fread

功能:将二进制数据转换成相应格式到内存中。

返回类型

size_t

如果返回成功:返回的是成功写入的元素的个数
失败:返回0
一般来说:字符的二进制数据和文本数据是相同的,所以在文档中可以看懂字符,但是其它的数据可就不一定。

函数参数

1.读取文件的数据的地址——const void * ptr
2.读取数据的大小——size_t size
3.要读取的数据的个数——size_t count
4.读取的文件指针——FILE * stream

3.随机读写

1.fseek

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

返回类型

int

成功返回0
失败返回非0值

参数

1.要读取的文件指针——FILE * stream
2.偏移的大小(左负右正)——long int offset
3.偏移的起点——int origin

偏移的起点:
1.“ SEEK_CUR ”:表示文件指针当前位置;
2.“ SEEK_END ”:表示文件末尾的位置;
3. “ SEEK_SET”:表示文件开始位置。

2.ftell

功能:返回文件指针相对于起始位置的偏移量

返回类型

long int

返回成功:当前位置的偏移量
返回失败:-1L这是long int的-1

函数参数

文件指针——FILE * stream

3.rewind

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

返回类型

void

函数参数

文件指针——FILE * stream

4.错误函数

1.ferror

功能:检查是否在读写过程中出错

返回类型

int

如果有错返回0
如果没错返回非0值

函数参数

文件指针——FILE * stream

2.feof

功能:检查是否因读取到文件结束标志而出错

返回类型

int

如果有错返回0
如果没错返回非0值

函数参数

文件指针——FILE * stream

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

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

相关文章

新享科技UniPro将敏捷理念数字化 助力企业迎接2023

2023年新年伊始,“复苏”和“希望”成了越来越多国内企业和消费者的直接感受,与此同时,国际经济也从疫情中缓慢“恢复”过来,特斯拉在中国区掀起了新一轮降价风潮,而行业“销冠”比亚迪却高调发布了百万级新车。如同晴…

websocket显示实时消息

websocket实现实时消息展示 前面介绍过websocket聊天功能的实现,不清楚的可以先看下 websocket实现在线聊天 https://blog.csdn.net/qq_51076413/article/details/124644500 之前发过websocket的相关使用和一对一聊天的demo代码,这里是针对上几篇文章的补充&#x…

Nacos服务注册与发现源码剖析

文章目录前提介绍Nacos源码下载Nacos客户端源码Spring Cloud Starter Nacos 源码Nacos服务端源码前提介绍 服务注册与发现作用主要是为了更好的管理众多的服务,不论Nacos还是Zookeeper、Eureka,作为注册中心都是为了解决以下两个问题: 屏蔽…

【论文写作】英文写作工具推荐及使用教程:DeepL(翻译) + EasyEssay(扩写) + QuillBot(改写润色)

文章目录一、DeepL二、EasyEssay2.1 润写2.2 扩写2.3 生成文章2.4 英文查重三、QuillBot一、DeepL DeepL官网 DeepL的主要作用是翻译,一开始我也是在B站上看到有人推荐用这款翻译工具的,抱着试一试的心态去用了一下,感觉翻译效果真的很不错&a…

【贪心】AcWing 803. 区间选点

905. 区间选点 文章目录题目描述输入格式:输出格式:数据范围输入样例输出样例方法:贪心解题思路代码复杂度分析:题目描述 给定 N 个闭区间 [ai,bi][a_i,b_i][ai​,bi​],请你在数轴上选择尽量少的点,使得每…

利用时间序列预测电量,冷量和压缩空气量

利用时间序列预测电量,冷量和压缩空气量背景分析与思路代码结果一,电量预测二,冷量预测三,压缩空气预测调优一,电量预测(m6)二,冷量预测三,压缩空气预测背景 根据提供的数据,详见附…

企业开发项目【1】— — 流程、开发环境搭建模板

企业开发项目【1】— — 流程、开发环境搭建模板 以黑马的学成在线为例 1 项目背景 2 项目介绍 3 开发环境搭建 3.1 开发工具配置(后端) 3.1.1 Idea配置 环境编码 编译级别配置 project structure - 设置JDK版本和编译级别3. 自动导包设置 IDEA可以…

远距离车载高速网络通讯方案

一 车载网络的发展 随着电子、半导体和通讯等行业的快速发展,汽车智能化的诉求也愈发强烈。越来越多的传感器和处理器的应用推动了汽车的智能化和电气化,与此同时,也使得ECU(电子控制单元)的数量快速增加。随着自动驾…

基于“python+”潮汐、风驱动循环、风暴潮等海洋水动力模拟

ADCIRC是新一代海洋水动力计算模型,它采用了非结构三角形网格广义波动连续方程的设计,在提高计算精确度的同时还减小了计算时间。被广泛应用于:模拟潮汐和风驱动的循环、预测风暴潮和洪水和近岸海上作业等。 除此之外,ADCIRC也是我…

目前市场上比较好的oa办公系统企业管理软件有哪些?

行政小李拿着《疫情期间春节返乡填报单》在工位之间来回穿梭…… 财务小王把年终奖金和福利方法拿给老板签字…… 行政小李的和人事小赵回回都因为入职新人培训的事情扯皮…… 后勤小郑每次办公物资的整理都要做半天…… OA系统本就是为企业内部的员工沟通、工作效率提高、协作…

WebDAV之葫芦儿·派盘+BookxNote

BookxNote 支持WebDAV方式连接葫芦儿派盘。 BookxNote是全新设计的电子书阅读学习笔记软件,以不同的思维方式重塑我们的学习过程。一边阅读一边划重点,提供多种划重点笔记工具,包括直线、矩形、圆形、高亮文本,图片摘录。高亮的文本自动编辑为重点的批注内容,还可以对重点…

查看网站历史记录的2种办法,怎样查看网站历史记录?

有个想购买二手域名的朋友问小黑:如何查看网站历史记录?于是今天就分享查看网站历史记录的 2种办法:网站历史记录和快照。 如果你在下单之前想查一查域名以前做过些什么,有没有违禁记录,被惩罚过,被K过等等…

LeetCode082_82. 删除排序链表中的重复元素 II

LeetCode082_82. 删除排序链表中的重复元素 II 一、描述 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1: 输入:head [1,2,3,3,4,4,5] 输出:…

CODESYS开发教程8-定时、触发和计数

今天继续我们的小白教程,老鸟就不要在这浪费时间了😊。 前面一期我们介绍了CODESYS的字符串及其操作。这一期主要介绍CODESYS的定时器及触发的相关功能块特性及用法,注意本文介绍的定时器、触发器和计数器均包含在CODESYS的Standard库中。 一…

c-note:字符串常量初始化存放位置

两行代码,分别以数组形式和指针形式,先说结论。 对于字面量"he"的存放位置: 1、数组形式,字面量直接存放进栈给temp处开辟的空间 2、指针形式,字面量"he"是一个常量,在编译之初便存在于…

如何在mac上使用idea做大数据开发

1 软件包下载jdk1.8 (jdk1.8.0_231)idea(包括2018,2019) (ideaIC-2019.3.3/ideaIC-2018.3.5)汉化包:汉化包.rarmaven3.6.3 (apache-maven-3.6)2 jdk的安装第一:把包直接放到自定义目录下第二:配置环境变量a) 打开终端 输入 sudo vi /etc/profile 或者 sudo vi .bash_profile解释…

联合证券|滴滴出行即日起恢复!A股嗨了!券商扛起领涨大旗

A股今天全线走高,沪指涨超1%克复3200点,深成指、创业板指盘中涨超2%;港股午后回落走低,恒生科技指数一度跌超2%。 详细来看,A股方面,两市股指盘中强势拉升,沪指涨超1%站稳3200点,深成…

『速查手册』MIME 多用途互联网邮件扩展

『速查手册』MIME 多用途互联网邮件扩展 文章目录『速查手册』MIME 多用途互联网邮件扩展一、多用途互联网邮件扩展 / 互联网媒体类型二、MIME 命名规则😎三、MIME 类型列表🍉1)、Type 类型形式2)、Application 应用文件3)、Text 文本4)、Video 视频文件…

elasticsearch(三)-- 理解ES的索引操作

一、前言 上一章我们主要学习了es的几个客户端,那么我们后面也主要通过kibana客户端、HighLevelClient高级客户端这两个来学习es. 这一章的学习我们主要是学习一些Elasticsearch的基础操作,主要是深入一些概念,比如索引的具体操作&#xff0…

三、WEB框架介绍以及设计模式

web框架介绍 什么是web框架 应该叫web应用框架(web application framework),它是一种开发框架。 通俗点来讲,就是用来开发web应用的程序。 为什么要使用框架来开发 互联网行业流行一句话叫“不要重复造轮子”,特别是对于新手和应用层开发…