【C语言】文件操作

这里写目录标题

  • 文件
  • 1.文件的打开和关闭
  • 2.文件操作函数
    • 1.字符操作函数
    • 2.文本行操作函数
    • 3.格式化输入输出
    • 4.二进制输入输出
    • 5.文件的随机读写
      • fseek
      • ftell
      • rewind
  • 3.文本文件和二进制文件
  • 4.文件读取结束的判定
  • 5.文件缓冲区

文件

  • 使用文件可以将数据直接存放再电脑的硬盘上,实现数据持久化
  • 按功能分为程序文件(.c .obj .exe),和数据文件(内容为程序运行时读取的数据),这里文件操作是对于数据文件而言
     

1.文件的打开和关闭

  • 被使用的文件会在内存中开辟一个文件信息区,是一个FILE结构体变量,记录文件相应信息,在文件打开时由系统自动创建并填充信息,一般用FILE*来维护
    在这里插入图片描述
  • 打开和关闭通过 fopen 和 fclose 实现
  • 若打开失败,则返回NULL,注意检查返回值
  • 文件读取方式 “r” 在文件不存在时报错,“w” 和 “a” 在文件不存在时自动创建
	FILE* pf = fopen("test.txt", "r");
	if( pf == NULL )
	{
		perror("fopen");
		return 1;
	}
	....
	fclose(pf);
	pf = NULL;

 

2.文件操作函数

流(stream):
运行C语言程序时,会默认打开3个FILE*类型的流,stdin(标准输入流),stdout(标准输出流),stderr(标准错误流)
在这里插入图片描述

 

1.字符操作函数

fputc
将内存中的字符输出(写入)到文件,返回值为ASCII值或EOF
在这里插入图片描述
 
fgetc
从文件中读取字符输入至内存,每次读取成功pf向后偏移一个字符
在这里插入图片描述
对标准输入输出流操作

	int ch = fgetc(stdin);
	fputc('a', stdout);

 

2.文本行操作函数

参数string为字符数组的地址

在这里插入图片描述
 

读取n-1个字符,会向*string放入’\0’
在这里插入图片描述
 

3.格式化输入输出

  • scanf,针对标准输入流(stdin)的格式化输入语句
  • fscanf,针对所有输入流(stdin,文件流)的格式化输入语句
  • sscanf,从一个字符串中读取格式化的数据
     
  • printf,针对标准输出流(stdout)的格式化输出语句
  • fprintf,针对所有输出流(stdout,文件流)的格式化输出语句
  • sprintf,把格式化的数据转换成字符串

sscanf 和 sprintf 可用于序列化和反序列化,可用于一些字符串与类型数据转换
 

4.二进制输入输出

只使用于文件,字符串中二进制写入和文本写入一样
fread 以二进制读取数据
在这里插入图片描述

fwrite 将数据以二进制写入
在这里插入图片描述
 

5.文件的随机读写

fseek

根据相对偏移量重新定位文件指针

  • 偏移量为相对起始(SEEK_SET)、当前(SEEK_CUR)、末尾(SEEK_END)的偏移量
    在这里插入图片描述
    打开存有 abcdef 的文件
    fgetc 读取时也会自动偏移
    在这里插入图片描述
     

ftell

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

  • 以 long int 返回当前位置偏移量
    在这里插入图片描述

rewind

让文件指针的位置回到文件的起始位置
在这里插入图片描述
在这里插入图片描述
 

3.文本文件和二进制文件

二进制文件:内存中的数据是以二进制形式存储的,不加转换直接输入到外存
文本文件:内存中的数据从二进制转换为ASCII值,以ASCII值形式存储到外存
如有整数10,以二进制形式存储占4个字节(整型),以ASCII值存储占2个字节(一个字符一个字节,字符’1’和字符’0’)
在这里插入图片描述
 

4.文件读取结束的判定

文件读取结束时(末尾结束或错误结束),使用 feofferror判断文件读取结束的原因
feof(pf)返回真则文件读取到末尾结束,ferror(pf)为真则发生错误读取结束

关于 fgetc 和 fgets 读取结束的返回值
fgetc 在读取到文件末尾和遇到错误读取结束时都会返回EOF,遇到文件末尾返回EOF同时会设置一个状态,这个状态用 feof 来检测,遇到错误返回EOF同时也会设置一个状态,这个状态用 ferror 来检测
fgets 在读取到文件末尾和遇到错误读取结束时都会返回NULL,遇到错误返回NULL同时同样也会设置一个状态,这个状态用 ferror 来检测

 

5.文件缓冲区

当写数据到文件中时,并不会直接写到文件中,而是先将数据放到输出缓存区,在缓存区刷新fclose关闭文件时刷新或者fflush主动刷新)时才会将其中的数据写入文件中,同样从文件中读取数据输入到内存中时,也会先将数据放到输入缓冲区,缓冲区刷新时才会将数据输入到内存中
在这里插入图片描述
如使用 fwrite 写数据
在这里插入图片描述
用户程序调用由操作系统提供的子功能集合叫做系统调用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

yolov5模型训练流程

yolov5简介 YOLOv5(You Only Look Once)是由 UitralyticsLLC公司发布的一种单阶段目标检测算 法,YOLOv5 相比YOLOv4 而言,在检测平均精度降低不多的基础上,具有均值权重文件更小,训练时间和推理速度更短的特点。YOLOv5 的网络结构…

11 容器常用命令

查看当前正在运行的容器有哪些? docker ps [options] exit :推出容器并停止 ctrl p q : 推出,但是容器还是运行 docker start id : 启动容器 docker restart id: 重启容器 docker stop id/name: 通过id或者name去停止容器 docker kill…

*(void**)解析——如何设计可以在32位下访问到内存区域的前4个字节,在64位下访问到前8个字节?

文章目录\*(int*)\*(void**)把*(void**)设计成函数,方便调用最近在写项目的时候遇到这样一个场景:需要管理多个空闲的内存块,把它们以链表的形式连接起来,那就需要在内存块的头4个字节(32位下)存放下一个内…

[oeasy]python0122_日韩字符_日文假名_JIS_Shift_韩国谚文

日文假名和韩国谚文 回忆上次内容 上次回顾了非ascii的拉丁字符编码的进化过程 0-127 是 ascii 的领域 世界各地编码分布 拉丁字符扩展 ascii 共 16 种 由iso组织制定 从iso-8859-1到iso-8859-16 无法同时显示俄文和法文 此时中日韩的文字也需要进入计算机 象形文字的字符集…

蓝桥杯刷题冲刺 | 倒计时8天

作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录1.三角形的面积2.图中点的层次1.三角形的面积 题目 链接: 三角形的面积 - 蓝桥云课 …

学术论文等级与分类标准——JCR

论文作为一个经常被提及的名词,论文是指通过研究、探究和分析等方式,对某个领域、问题或主题做出有创新性、有思考深度和有价值的贡献,并将这些成果进行系统总结和阐述的一种学术性文献。论文通常需要按照学术规范进行撰写,并经过…

Element Plus 实例详解(五)___Scrollbar 滚动条

Element Plus 实例详解(五)___Scrollbar 滚动条 本文目录: 一、前言 二、搭建Element Plus试用环境 1、搭建Vue3项目(基于Vite Vue) 2、安装Element Plus 三、Element Plus Scrollbar 滚动条功能试用 1、基础用法…

语句【C++】

简单语句空语句复合语句条件语句if 语句switch 语句迭代语句while语句传统 for 语句范围 for 语句&#xff08;C11&#xff09;do while 语句跳转语句break 语句continue 语句goto 语句简单语句 大多数语句以分号结束。 ival 5; //没有实际用处的表达式 cout<<ival; …

Mybatis(一)-------

mybatis的优势&#xff1a; 1&#xff09;、消除大量的jdbc冗余代码&#xff0c;包括参数设置、结果封装等 2&#xff09;、sql语句可控制&#xff0c;方便查询优化&#xff0c;使用灵活 3&#xff09;、学习成本低&#xff0c;且提供了对spring框架的集成 4&#xff09;、…

shell 脚本之一键部署安装 Nginx

今天咸鱼给大家分享个源码编译安装 Nginx 的 shell 脚本 这个 shell 脚本可重复执行 完整源码放在最后 定义一个变量来存放 nginx 版本号 version1.15.4nginx 下载地址&#xff1a;http://nginx.org/download/ 下列函数功能则是判断当前步骤是否执行成功&#xff0c;并将结…

并查集和哈希表的实现

并查集和哈希表的实现 文章目录并查集和哈希表的实现1.并查集的功能2.并查集的基本原理3.并查集的实现哈希表&#xff08;hash&#xff09;1.拉链法2.开放寻址法方法流程代码演示3,字符串哈希1.并查集的功能 1.将两个集合进行合并 2.询问两个元素是否在一个集合里面 2.并查集…

【Python】线程

目录 1. 线程的创建与销毁 2. 线程共享全局变量 3. 互斥锁 4. 进程和线程的对比 1. 线程的创建与销毁 线程是进程的一个分支&#xff0c;进程默认有一个线程&#xff0c;但也可以有多个线程 线程是CPU调度的基本单位 线程是依附在进程里面的&#xff0c;由进程创建&#xff…

java企业级信息系统开发学习笔记02初探spring——利用组件注解符精简spring配置文件

文章目录一、学习目标二、打开01的项目三、利用组件注解符精简spring配置文件&#xff08;一&#xff09;创建新包&#xff0c;复制四个类&#xff08;二&#xff09;修改杀龙任务类&#xff08;三&#xff09;修改救美任务类&#xff08;四&#xff09;修改勇敢骑士类&#xf…

第14章_MySQL事务日志

# 第15章_锁 &#x1f3e0;个人主页&#xff1a;shark-Gao &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是shark-Gao&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f389;目前状况&#xff1a;23届毕业生&#xff0c;目前在某公司…

2009年9月Java全国计算机等级考试二级笔试试卷

&#xff08;1&#xff09;下列数据结构中&#xff0c;属于非线性结构的是 A&#xff09;循环队列 B&#xff09;带链队列 C&#xff09;二叉树 D&#xff09;带链栈 &#xff08;2&#xff09;下列数据结构中&#xff0c;能够按照“先进后出”原则存取数据的是 A&#xff09;…

可用的公开 RTSP/ RTMP 在线视频流资源地址(亲测可行)

可用的公开 RTSP/ RTMP 在线视频流资源地址(亲测可行) 时间节点&#xff1a;2023/01/23 rtsp&#xff1a; rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4 rtmp&#xff1a; 韩国GOOD TV——rtmp://mobliestream.c3tv.com:554/live/goodtv.sdp 伊拉克 A…

python去掉字符串中的指定字符的方法

我们在使用 Python处理字符串的时候&#xff0c;经常会遇到一些字符串中出现了指定字符&#xff0c;比如以下代码&#xff1a; 上面代码中的#就是一个指定字符&#xff0c;在 python中&#xff0c;如果使用#替换为指定字符&#xff0c;那么就会报错。当我们对需要处理的字符进行…

蓝桥杯刷题冲刺 | 倒计时9天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;马上就要蓝桥杯了&#xff0c;最后的这几天尤为重要&#xff0c;不可懈怠哦&#x1f43e; 文章目录1.阶乘之和2.生活大爆炸版石头剪刀布1.阶乘之和 题目 链接&#xff1a; 阶乘之和 - 蓝桥云课 (l…

企业安全现状与未来趋势如何?

随着越来越多的第三方办公应用在企业的应用&#xff0c;以及越来越多的企业开始通过云计算、大数据、物联网等数字技术进行数字化转型&#xff0c;一些大企业几乎每秒就能产生上万条数据&#xff0c;这些数据都是企业的资产。 但是&#xff0c;在各种办公软件应用、数字技术给企…

软件测试方法下篇(正交法、场景设计法、错误猜测法)

一、正交法 研究多因素、多水平的一种实验方法&#xff0c;通过正交性找出实验中各因素最优的水平组合&#xff0c;通过分析这些最优组合的实验结果&#xff0c;来分析整个实验的结果与情况。 1、概念及计算方法 因素&#xff1a;待考察的变量 &#xff1b;因素数&#xff1…
最新文章