关于文件操作

1. 为什么使⽤⽂件?

如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失 了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,我们可以使⽤ ⽂件。 

2. 什么是⽂件?

磁盘(硬盘)上的⽂件是⽂件。 但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类 的)。 

程序⽂件包括源程序⽂件(后缀为.c),⽬标⽂件(windows环境后缀为.obj),可执⾏程序(windows 环境后缀为.exe)。 

数据⽂件 ⽂件的内容不⼀定是程序,⽽是程序运⾏时读写的数据,⽐如程序运⾏需要从中读取数据的⽂件,或 者输出内容的⽂件。 

3. ⼆进制⽂件和⽂本⽂件?

数据在内存中以⼆进制的形式存储,如果不加转换的输出到外存的⽂件中,就是⼆进制⽂件。 如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的⽂件就是⽂ 本⽂件。 

4. ⽂件的打开和关闭

 流

我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输⼊输出 操作各不相同,为了⽅便程序员对各种设备进⾏⽅便的操作,我们抽象出了流的概念,我们可以把流 想象成流淌着字符的河。 C程序针对⽂件、画⾯、键盘等的数据输⼊输出操作都是通过流操作的。⼀般情况下,我们要想向流⾥写数据,或者从流中读取数据,都是要打开流,然后操作。

标准流

 那为什么我们从键盘输⼊数据,向屏幕上输出数据,并没有打开流呢? 那是因为C语⾔程序在启动的时候,默认打开了3个流:

 • stdin-标准输⼊流,在⼤多数的环境中从键盘输⼊,scanf函数就是从标准输⼊流中读取数据。

 • stdout-标准输出流,⼤多数的环境中输出⾄显⽰器界⾯,printf函数就是将信息输出到标准输出 流中。

 • stderr-标准错误流,⼤多数环境中输出到显⽰器界⾯。

这是默认打开了这三个流,我们使⽤scanf、printf等函数就可以直接进⾏输⼊输出操作的。 

stdin、stdout、stderr三个流的类型是: FILE * ,通常称为⽂件指针。C语⾔中,就是通过 FILE* 的⽂件指针来维护流的各种操作的。 

⽂件的打开和关闭 

ANSIC规定使⽤ fopen 函数来打开⽂件, fclose 来关闭⽂件。 

FILE * fopen ( const char * filename, const char * mode );

int fclose ( FILE * stream ); 

mode 

5. ⽂件的顺序读写

每个函数相关信息可以去c plus plus查看 

6. ⽂件的随机读写

fseek

根据⽂件指针的位置和偏移量来定位⽂件指针(⽂件内容的光标)。 

int fseek ( FILE * stream, long int offset, int origin ); 

ftell

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

long int ftell ( FILE * stream );  

rewind

 让⽂件指针的位置回到⽂件的起始位置 

void rewind ( FILE * stream );  

7. ⽂件读取结束的判定

feof 的作⽤是:当⽂件读取结束的时候,判断是读取结束的原因是否是:遇到⽂件尾结束。 

 ⽂本⽂件读取是否结束,判断返回值是否为 EOF ( fgetc ),或者 NULL ( fgets )

例如: • fgetc 判断是否为 EOF . • fgets 判断返回值是否为 NULL .

⼆进制⽂件的读取结束判断,判断返回值是否⼩于实际要读的个数。 

8. ⽂件缓冲区

ANSIC标准采⽤“缓冲⽂件系统”处理的数据⽂件的,所谓缓冲⽂件系统是指系统⾃动地在内存中为 程序中每⼀个正在使⽤的⽂件开辟⼀块“⽂件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓 冲区,装满缓冲区后才⼀起送到磁盘上。如果从磁盘向计算机读⼊数据,则从磁盘⽂件中读取数据输 ⼊到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓 冲区的⼤⼩根据C编译系统决定的。 

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

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

相关文章

栈和队列的算法题目(C语言)

1. 括号匹配问题 20. 有效的括号 - 力扣(LeetCode) 利用栈后入先出的特性解题 1.判断字符串是否为空 为空返回 2.创建栈,遍历字符串 第一个字符是左括号的情况:入栈->继续遍历下一个字符 第一个字符是右括号的情况&#xf…

高等数学 3.3 泰勒公式

泰勒(Taylor)中值定理1 如果函数 f ( x ) f(x) f(x) 在 x 0 x_0 x0​ 处具有 n n n 阶导数,那么存在 x 0 x_0 x0​ 的一个邻域,对于该领域内的任一 x x x ,有 f ( x ) f ( x 0 ) f ′ ( x 0 ) ( x − x 0 ) f…

CAD图1

文章目录 选择直线工具选择圆形选中圆形 选择直线工具 画一条十字中心线 选择圆形 以十字中心为起点画一个半径为 53 的圆形 选中圆形 选中圆形,捕捉右侧圆形焦点

Android AlertDialog圆角背景不生效的问题

一行解决: window?.setBackgroundDrawableResource(android.R.color.transparent) 原文件: /*** Created by Xinghai.Zhao* 自定义选择弹框*/ SuppressLint("InflateParams", "MissingInflatedId") class CustomDialog(context: Context?) : AlertDia…

【算法专题】穷举vs暴搜vs深搜vs回溯vs剪枝

二叉树剪枝 LCR 047. 二叉树剪枝 - 力扣(LeetCode) 本题要求我们将全部为0的二叉树去掉,也就是剪枝,当我们举一个具体的例子进行模拟时,会发现,只关注于对其中一个子树的根节点进行剪枝,由于我…

4款AI生成PPT工具推荐,提升工作效率

在如今的工作环境中,PPT制作是许多技术人员不可避免的任务,尤其是在汇报、展示技术方案、以及项目进展时。随着AI技术的快速发展,使用AI生成PPT成为了提高效率的一种新趋势。本文将介绍几款适合程序员、技术人员的AI生成PPT工具,帮…

Agent:原理与快速构建 | 人工智能 | Langchain | Python ——学习笔记

视频链接:https://www.bilibili.com/video/BV1Hz421b7ag/?spm_id_from333.788&vd_source90787f5794c8e73cf358973d1de2e47f # # 将.env的信息放到环境变量 # from dotenv import load_dotenv # load_dotenv() 第一节课程:使用openai调用智谱轻言问…

【Kubernetes】常见面试题汇总(十)

目录 29.简述 Kubernetes 自动扩容机制? 30.简述 Kubernetes Service 类型? 31.简述 Kubernetes Service 分发后端的策略? 32.简述 Kubernetes Headless Service ? 29.简述 Kubernetes 自动扩容机制? (…

强化学习——马尔可夫决策过程(MDP)【附 python 代码】

一、马尔可夫过程 过程介绍随机过程在某时刻 t 的状态 S t S_t St​ 通常取决于 t 时刻之前的状态。状态 S t 1 S_{t1} St1​ 的概率表示为: P ( S t 1 ∣ S 1 , . . . , S t ) P(S_{t1}|S_1,...,S_t) P(St1​∣S1​,...,St​)马尔可夫过程某时刻 t 的状态只取…

C++面试模拟01

第一部分:基础知识 问:解释 const 关键字的作用,以及在什么场景下你会使用 const? 问:在 C 中,new 和 malloc 的区别是什么? 问:请解释什么是“深拷贝”和“浅拷贝”?在…

IMS 呼叫流程(详细)

目录 业务模型 典型组网如图1所示 信令流程 具体的语音流程如图2所示 主叫信令面流程 01:UE_A->P-CSCF/ATCF 02:P-CSCF/ATCF_A->PCRF_A 03:PCRF_A->PCSCF/ATCF_A 04:P-CSCF/ATCF_A 处理(把S-CSCF加到Route) 05:S-CSCF_A->MMTel AS/SCC AS_A 06:MM…

JAVA-集合相关

HashMap如何解决哈希冲突的? 计算hash值,基于hashCode计算冲突之后,先是使用链式寻址法当链表长度大于8,且hash表的容量大于60的时候,再添加元素则转化成红黑树 为什么计算hash值是,是将hash地址的值右移1…

JavaSE:13、常用工具类

学习 资源1 学习资源 2 1、数学工具类 import com.test.*;import java.util.Random; import java.util.RandomAccess;public class Main {public static void main(String [] argv) throws Exception {System.out.println(Math.pow(5,3));//125.0System.out.println(Math.a…

大数据Flink(一百一十八):Flink SQL水印操作(Watermark)

文章目录 Flink SQL水印操作(Watermark) 一、为什么要有WaterMark 二、​​​​​​​​​​​​​​Watermark解决的问题 三、​​​​​​​​​​​​​​代码演示 Flink SQL水印操作(Watermark) 一、​​​​​​​为什么…

43.常用C++编译器推荐——《跟老吕学C++》

43.常用C编译器推荐——《跟老吕学C》 常用C编译器推荐一、C编译器介绍1. GCC (GNU Compiler Collection)2. Clang2.1 Clang的特点2.2 Clang的应用场景2.3 Clang与GCC的比较 3. Microsoft Visual C (MSVC)MSVC的特点MSVC的使用场景MSVC与其他编译器的比较 4. Intel C Compiler4…

Spring MVC设置请求头和响应头的Header

在Spring MVC中,动态设置请求头和响应头的方法有多种,以下是一些常见的方式: 设置请求头 使用RequestHeader注解 这个注解用于读取请求中的单个HTTP头部值,并将其作为一个参数传递给控制器方法。 RequestMapping("/examp…

【Midjourney中文版】

Midjourney中文版打破了传统创作工具的界限,无需具备专业的艺术技能或复杂的软件操作能力,即可轻松创作出高质量的图片。它支持多种创作模式,包括文生图、图生图、图片混图融合等,满足多样化的创作需求。 打开Midjourney中文版后…

特斯拉主动巡航技术解析

特斯拉的主动巡航控制技术是其自动驾驶技术套件(Autopilot)中的一项重要功能,旨在提升驾驶的舒适性和便利性。以下是对特斯拉主动巡航技术的详细解析: 一、技术原理与功能 1. 原理概述 特斯拉的主动巡航控制通过车辆前部的摄像…

istio中如何使用serviceentry引入外部服务

假设需要引入一个外部服务,外部服务ip为10.10.102.90,端口为32033. 引入到istio中后,我想通过域名gindemo.test.ch:9090来访问这个服务。 serviceentry yaml内容如下: apiVersion: networking.istio.io/v1beta1 kind: ServiceEn…

【Pycharm】Pycharm创建Django提示pip版本需要升级

目录 1、现象 2、分析 3、本质 前言:经常使用pycharm创建django、flask等项目时候提示pip版本需要升级,解决方案 1、现象 使用Pycharm创建Django项目提示安装Django超时,报错建议pip升级22升级到24 2、分析 之前使用命令升级了pip到了24…