当前位置: 首页 > news >正文

C语言中的文件操作

在这里插入图片描述

前言

嗨,我是firdawn,在本章中我们将介绍,文件的概念,文件的打开和关闭,在篇末我们将介绍文件缓冲区的作用,下面是本章的思维导图,接下来,让我们开始今天的学习吧!
在这里插入图片描述

一,为什么使用文件

文件能帮助我们将数据持久化地保存下来,而运行的程序存储在内存中,程序开始前分配空间,程序结束后空间被回收,这段空间如果被其他程序使用,原来的数据就会被覆盖,就消失了。

二,什么是文件

文件就是存储在硬盘上的文件,可以存储各种类型的数据。不过,在C语言中,我们将这些文件分为程序文件和数据文件。

2.1 程序文件

程序文件就是用来存放程序信息的文件,包括源文件(后缀为 .c),目标文件(Windows环境下后缀为 .obj),可执行程序(后缀为 .exe)。
在这里插入图片描述

2.2 数据文件

数据文件就是程序文件以外的文件。

2.3文件名

文件名包括文件路径和文件名称以及文件后缀。在计算机中每一个文件都有唯一的文件标识,即文件名。例如:c:\code\test.txt

三,二进制文件和文本文件

根据数据的组织形式,数据⽂件被称为⽂本⽂件或者⼆进制⽂件。
二进制文件:数据在内存中以⼆进制的形式存储,如果不加转换的输出到外存的⽂件中,就是⼆进制⽂件。
文本文件:存储字符串"hello beautiful girl"时,数据在外存中就是以ASCII的形式进行存储,打开文本文件时,根据它的后缀来确定它的打开方式,如果是以 .txt 结尾,就以文本的方式去解读打开。

四,文件的打开和关闭

4.1 流和标准流

4.1.1 流

在这里插入图片描述

4.1.2 标准流

在这里插入图片描述

4.2 文件指针

对于每个被打开的文件,都会在内存中开辟出一个文件信息区,用来存储文件的基本信息,例如文件名,文件大小,文件位置,文件状态等,而这些信息是存储在一个结构体变量中,该结构体变量类型是由系统声明的,叫做FILE。
例如,VS2013编译环境提供的stdio.h 头⽂件中有以下的⽂件类型声明:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3 文件的打开和关闭

在文件打开的同时,会返回一个FILE* 的指针,这可以帮助我们通过文件指针操作文件。ANSI C规定使用fopen 函数来打开⽂件,fclose 来关闭⽂件。

//
打开⽂件FILE * fopen ( const char * filename, const char * mode );//
关闭⽂件int fclose ( FILE * stream );

下面是文件的打开模式:
在这里插入图片描述
举个栗子:
在这里插入图片描述

五,文件的顺序读写

5.1 顺序读写函数介绍

在这里插入图片描述

5.2 对比一组函数

5.2.1 对比scanf/fscanf/sscanf

5.2.1.1 介绍scanf/fscanf/sscanf
  1. scanf:scanf函数介绍,scanf是从标准输入流stdin中读取格式化的数据,放入参数所指向的位置。
    在这里插入图片描述
  2. fscanf:fscanf函数介绍,fscanf是从指定输入流(适用于所有输入流)中读取格式化的数据,放入参数所指向的位置。在这里插入图片描述
  3. sscanf:sscanf函数的介绍,sscanf是从字符串中读取数据,转换为格式化的数据,放入参数所指向的位置。在这里插入图片描述
5.2.1.2 对比使用scanf/fscanf/sscanf
  1. scanf:
    在这里插入图片描述

  2. fscnaf:在这里插入图片描述

  3. sscanf:在这里插入图片描述

5.2.2 对比printf/fprintf/sprintf

5.2.2.1 介绍printf/fprintf/sprintf
  1. printf:printf函数介绍,用于将格式化的数据输出到标准输入流stdin中(一般指的是是屏幕)。在这里插入图片描述

  2. fprintf:fprintf函数介绍,用于从键盘中读取格式化的数据,输出到指定的输出流中。在这里插入图片描述

  3. sprintf:sprintf函数介绍,用于从键盘中读取格式化的数据,转换为字符串,存储到字符数组中。在这里插入图片描述

5.2.2.2 对比使用printf/fprintf/sprintf
  1. 使用printf在这里插入图片描述

  2. 使用fprintf在这里插入图片描述

  3. 使用sprintf在这里插入图片描述

六,文件的随机读写

6.1 fseek

fseek函数介绍,根据⽂件指针的位置和偏移量来定位⽂件指针(⽂件内容的光标)。
在这里插入图片描述
在这里插入图片描述

6.2 ftell

ftell函数介绍,ftell用于返回⽂件指针相对于起始位置的偏移量。
在这里插入图片描述
在这里插入图片描述

6.3 rewind

rewind函数介绍,rewind能够让⽂件指针的位置回到⽂件的起始位置在这里插入图片描述
在这里插入图片描述

七,文件读取结束的判定

7.1 feof和ferror的使用

  1. feof:feof函数介绍,当文件读取结束后,feof可以用于判定文件是否是因为遇到了文件末尾而结束。在这里插入图片描述
    在这里插入图片描述

  2. ferror:ferror函数介绍,当文件读取结束时ferror用于判断文件结束的原因是否是遇到了错误。在这里插入图片描述
    在这里插入图片描述

八,文件缓冲区

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

C语言中的文件操作

前言 嗨,我是firdawn,在本章中我们将介绍,文件的概念,文件的打开和关闭,在篇末我们将介绍文件缓冲区的作用,下面是本章的思维导图,接下来,让我们开始今天的学习吧! 一…...

python使用xlrd读取excel的时候把字符串读成了数字

xlrd 是一个 Python 库,用于读取 Excel 文件(.xls 和 .xlsx,但 .xlsx 需要 openpyxl 或 xlrd 的较新版本)。然而,xlrd 在读取 Excel 文件时通常会将单元格的内容按其原始数据类型(如字符串、数字、日期等&a…...

【C语言】走进指针世界(下卷)

前言 在“走进指针世界(上卷)”中,我们已经说过:什么是指针、内存和地址,指针的使用、声明、初始化,取地址运算符、解引用运算符以及这两者关系,还有指针赋值。 在正式使用指针进行各种代码的…...

【Spring】SSM整合_入门代码实现

1. Maven依赖 在pom.xml中添加SSM框架的依赖 <!-- Spring Core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.x</version> </dependency>…...

C++代码错误解决1(函数模板)

1、代码如下 //示例函数模板的使用 #include <iostream> #include <string> using namespace std; template <typename T>//函数模板 T max(T a,T b) {return a>b?a:b; } int main() {int a,b;cout<<"input two integers to a&b:"…...

idea configuration 配置 方便本地启动环境切换

idea 再项目启动的时候避免切换环境导致上线的时候出现环境配置问题 可以再idea 的 configuration 中配置项目的 vm options 虚拟机的内容占用 -Xmx256m -Xms256m -Xmn100m -Xss256k program arguments properties 文件中需要修改的配置参数 active profiles 指定启动的本…...

win10配置wsl的深度学习环境

# 1、一步完成wsl&#xff1a;开启虚拟机、linux子系统、并下载ubuntu # 官方文档: https://learn.microsoft.com/zh-cn/windows/wsl/install wsl --install# 2、打开windows terminal&#xff0c;选ubuntu交互环境 # 第一次需要配置用户名和密码 # 接下来正常使用即可# 3、cud…...

如何处理时间序列的缺失数据

您是否应该删除、插入或估算&#xff1f; 世界上没有完美的数据集。每个数据科学家在数据探索过程中都会有这样的感觉&#xff1a; df.info()看到类似这样的内容&#xff1a; 大多数 ML 模型无法处理 NaN 或空值&#xff0c;因此如果您的特征或目标包含这些值&#xff0c;则在…...

fastapi中实现多个路由请求

大家伙&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 前言 最近在写机器人相关的接口&#xff0c;顺手学了学python&#xff0c;发现这是个好东西&#xff0c;写代码效率比java要高很多&#xff0c;比如写个词云呀&#xff0c;写个回调呀&am…...

前端框架选择指南:React vs Vue vs Angular

选择前端框架时&#xff0c;React、Vue 和 Angular 都是流行的选择&#xff0c;各有优缺点。我们可以从各个维度进行比较和选择&#xff1a; React 核心理念&#xff1a; 组件化开发&#xff0c;专注于视图层。学习曲线&#xff1a; 相对平缓&#xff0c;因为重点在于JSX和组…...

猫头虎 解析:为什么AIGC在国内适合做TOB,在国外适合做TOC?

猫头虎 解析&#xff1a;为什么AIGC在国内适合做TOB&#xff0c;在国外适合做TOC&#xff1f; 博主 猫头虎 的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面…...

并发编程笔记8--ThreadLocal结构详解

ThreadLocal&#xff0c;即线程变量&#xff0c;是一个以ThreadLocal对象为键&#xff0c;任意对象为值的存储结构。这个结构被附带在线程上&#xff0c;也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的值。可以通过set(T)方法来设置一个值&#xff0c;在…...

强烈推荐 20.7k Star!企业级商城开源项目强烈推荐!基于DDD领域驱动设计模型,助您快速掌握技术奥秘,实现业务快速增长

更多资源请关注纽扣编程微信公众号 1 项目简介 商城是个从零到一的C端商城项目&#xff0c;包含商城核心业务和基础架构两大模块,推出用户、消息、商品、订单、优惠券、支付、网关、购物车等业务模块&#xff0c;通过商城系统中复杂场景&#xff0c;给出对应解决方案。使用 …...

【C++STL详解(四)------vector的模拟实现】

文章目录 vector各函数接口总览vector当中的成员变量介绍默认成员函数构造函数1构造函数2构造函数3拷贝构造函数赋值运算符重载函数析构函数 迭代器相关函数begin和end 容量和大小相关函数size和capacityreserveresizeempty 修改容器内容相关函数push_backpop_backinserterases…...

租赁系统|北京租赁系统|租赁软件开发流程

在数字化时代的浪潮下&#xff0c;小程序成为了各行各业争相探索的新领域。租赁行业亦不例外&#xff0c;租赁小程序的开发不仅提升了用户体验&#xff0c;更为商家带来了更多商业机会。本文将详细解析租赁小程序的开发流程&#xff0c;为有志于进军小程序领域的租赁行业从业者…...

JAVA面试题大全(十四)

1、Kafka 可以脱离 Zookeeper 单独使用吗&#xff1f;为什么&#xff1f; kafka不能脱离zookper单独使用&#xff0c;因为kafka使用zookper管理和协调kafka的节点服务器。 2、Kafka 有几种数据保留的策略&#xff1f; Kafka提供了多种数据保留策略&#xff0c;这些策略用于定…...

Web Accessibility基础:构建无障碍的前端应用

Web Accessibility&#xff08;网络无障碍&#xff09;是确保所有人都能平等访问和使用网站和应用程序的关键。这包括视觉、听觉、运动和认知能力有限的用户。以下是一些构建无障碍前端应用的基础原则和代码示例&#xff1a; 2500G计算机入门到高级架构师开发资料超级大礼包免…...

谈谈你对 SPA 的理解?

1 理解基本概念 SPA&#xff08;single-page application&#xff09;单页应用&#xff0c;默认情况下我们编写 Vue、React 都只有一个html 页面&#xff0c;并且提供一个挂载点&#xff0c;最终打包后会再此页面中引入对应的资源。&#xff08;页面的渲染全部是由 JS 动态进行…...

JAVA给一个JSON数组添加对象

操作Mysql表的json字段&#xff0c;查询json字段的内容&#xff0c;将新增的内容添加到查询的json数组中 String a "[{\"name\": \"张三\", \"age\": 10, \"gender\": \"男\", \"email\": \"123qq.co…...

设计一个完美的用户角色权限表

设计一个完美的用户角色权限表需要考虑系统的安全性、灵活性和可扩展性。以下是一个详细的用户角色权限管理表设计方案&#xff0c;包含多个表结构和字段描述。 目录 1. 用户表&#xff08;Users Table&#xff09;2. 角色表&#xff08;Roles Table&#xff09;3. 权限表&…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...