C语言学习笔记 Day14(文件管理)

news2025/1/6 10:05:06

Day14 内容梳理:

目录

Chapter 10  文件操作

10.0 概述

10.1 打开、关闭文件

(1)文件指针

(2)打开文件  fopen()

(3)读取文件  fgetc()

(4)写入文件  fputc()


Chapter 10  文件操作

10.0 概述

文件分为磁盘文件和设备文件。

磁盘文件:指存储在外部介质上的相关数据的有序集合,使用时才调入内存

设备文件:把和主机相连的输入输出设备看作一个个文件。把它们的输入和输出当作是对磁盘文件的读和写。

所有的磁盘文件在本质上都是以字节为单位进行顺序存储的。

磁盘文件在逻辑上被分为文本文件和二进制文件。

文本文件:

基于字符编码的文件。

常见编码有ASCII、YNICODE等等。

一般可使用文本编辑器直接打开。

二进制文件:

基于值编码的文件。

把数据按其在内存中的存储形式原样输出到磁盘上

10.1 打开、关闭文件

(1)文件指针

在C语言中用一个指针变量指向一个文件,这个指针就被称为文件指针。

在使用任何文件之前,都必须先打开文件,使用完之后再关闭。

打开和关闭用的都是stdio库:#include<stdio.h>

如果没有关闭文件,则会在程序退出时统一关闭。

(2)打开文件  fopen()

一般将文件指针命名为fp。

打开方式:

FILE* fp = fopen(const char* 文件名, const char* 模式设置);

模式设置可选的参数:

模式设置
r或rb以只读的方式打开文件(不创建文件,若该文件不存在则报错)
w或wb以写的方式打开文件(文件存在,则清空文件;不存在则创建一个文件)
a或ab以追加的方式打开文件,在末尾添加内容(文件不存在则创建一个文件)
r+或rb+以可读、可写的方式打开文件(不创建新文件)
w+或wb+以可读、可写的方式打开文件(文件存在则清空文件;不存在则创建文件)
a+或ab+以添加的方式打开文件并在末尾更改文件;若文件不存在则创建新文件

总而言之:

        带r的都是只读方式,不创建文件。文件若不存在则报错。

        带w的都包括写的方式,不论文件存不存在,清除掉旧的并创建新的

        带a的都是追加/添加,打开文件并在末尾添加内容,若文件不存在则创建新文件。

以下图为例,以只读方式(“r”)打开D盘中名为abc.txt的文件。

若文件打开成功,则fp指针编程文件指针;打开失败则fp = NULL。

需要注意两点:(1)fopen()不太安全,所以要加#define _CRT_SECURE_NO_WARNINGS,而且要加在导入库的代码之前。        (2)一般的路径都是反斜杠\,但是在C语言中,\\才代表反斜杠。单斜杠\一般搭配其他符号使用(比如\n换行)。所以路径操作建议写成正斜杠/,或者双反斜杠\\

文件打开失败有三种情况

①找不到文件

②文件权限不足(读/写/执行)

③已打开的文件数量超过上限(65535个文件)。

因为文件打开失败的几率不小,所以最好加个fp == NULL的条件判断来处理。

(3)读取文件  fgetc()

往新建的abc.txt文件中加了句hello world。

不需要让文件指针++,因为文件中的光标会自行往下读取,只需要创建个指针然后不断让指针等于fgetc(文件指针)即可:

文件用-1作为文件终止符,是因为文件数据以ASCII码(范围是0-127)的形式存储,不可能出现-1,所以可用-1。

另外,可以把代码缩减一下。

由于都是逐字符读取再打印。而逐字符读取中,=的优先级低于判断是否终止的 !=,所以需要用括号括起来(read_ch = fgetc(fp)),再判断是否终止。

(4)写入文件  fputc()

接着用上面写入了hello world的文件abc.txt,右下角是输入的字符,而右侧则是已被更改的abc.txt文件。

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

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

相关文章

Arthas:Java应用诊断利器

1、简介 Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c…

【大数据算法】一文掌握大数据算法之:概述、特点、类型及难点等,值得收藏。

大数据算法概述 1、引言2、大数据算法概述2.1 什么是大数据算法2.2 大数据算法特点2.3 大数据算法类型2.4 大数据算法难点 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c;大数据开篇反馈不错哦。 小鱼&#xff1a;嗯&#xff0c;是的呢&#xff0c; 咱这个专栏&#xff…

Fly Catcher:通过监测恶意信号来检测飞机欺骗

Fly Catcher 的开发者 Angelina Tsuboi 是一名飞行员、网络安全研究员和发明家。 她决定着手一个将这三个不同兴趣结合起来的项目&#xff0c;以解决航空雷达系统的一个重大问题。 ADS-B 系统最初用于基本的飞机定位和跟踪&#xff0c;Tsuboi 对该系统的网络安全方面进行了深…

正点原子阿尔法ARM开发板-IMX6ULL(一)——环境安装和资源介绍

文章目录 一、环境安装二、主目录的资源介绍2.1 alpzha2.2 linux2.3 c_linux 三、QT四、交叉编译五、VScode六、其他6.1 SecureCRT6.2 Putty6.3 MobaXterm6.4 NFS6.5 TFTP 这几天实习的强度下来了&#xff0c;就来看看嵌入式方面的知识了 也是买了正点原子的阿尔法的嵌入式开发…

一次日志记录中使用fastjson涉及到ByteBuffer的教训

背景 目前本人在公司负责的模块中&#xff0c;有一个模块是负责数据同步的&#xff0c;主要是将我们数据产线使用的 AWS Dynamodb 同步的我们的测试QA 的环境的 MongoDB 的库中&#xff0c;去年开始也提供了使用 EMR 批量同步的功能&#xff0c;但是有时候业务也需要少量的数据…

Linux内核分析(RCU机制和内存优化)

文章目录 前言一、RCU概念RCU 的基本概念1. **如何工作**2. **RCU 的工作流程** RCU 的主要优势RCU 的使用场景RCU 的挑战和局限RCU 的实现总结 二、RCU对链表的访问三、Linux中的屏障主要类型应用场景实现作用用途 前言 一、RCU概念 RCU&#xff08;Read-Copy-Update&#x…

【Web】巅峰极客2024 部分题解

目录 EncirclingGame GoldenHornKing php_online admin_Test EncirclingGame 玩赢游戏就行 GoldenHornKing 利用点在传入的app 可以打python内存马 /calc?calc_reqconfig.__init__.__globals__[__builtins__][exec](app.add_api_route("/flag",lambda:__i…

【数据结构】二叉树(三)精选Oj题

本篇已经是二叉树第三篇啦&#xff0c;下面讲解相关面试题&#xff0c;写作不易&#xff0c;求路过的朋友给个点赞与收藏呀~ 目录 1、相同的树 2、另一颗树的子树 3、翻转二叉树 4、对称二叉树 5、平衡二叉树 6、构建二叉树 7、二叉树的最近公共祖先 孩子双亲解法 二叉…

企业为何需要渗透测试

随着数字化时代的全面到来&#xff0c;互联网已成为企业运营不可或缺的一部分。然而&#xff0c;日益复杂的网络环境和不断演变的攻击手段&#xff0c;使得网络安全问题日益严峻。在这一背景下&#xff0c;渗透测试作为一种重要的安全评估手段&#xff0c;对于保障企业信息安全…

day24-测试之接口测试基础

目录 一、接口的定义 二、接口的优点 三、API接口 四、接口测试流程 五、网络基础概念 六、HTTP和RURL 七、get和post请求 八、数据格式 九、状态码 十、restful风格 十一、接口工具 一、接口的定义 程序之间协作所要遵循的一套规范、标准 二、接口的优点 2.1.责任…

探索和表征大型语言模型在嵌入式系统开发和调试中的应用

这篇论文的标题是《Exploring and Characterizing Large Language Models for Embedded System Development and Debugging》&#xff0c;作者是来自华盛顿大学的研究团队。论文主要探讨了大型语言模型&#xff08;LLMs&#xff09;在嵌入式系统开发和调试方面的应用潜力。以下…

前端技巧——复杂表格在html当中的实现

应用场景 有时候我们的表格比较复杂&#xff0c;表头可能到处割裂&#xff0c;我们还需要写代码去完成这个样式&#xff0c;所以学会在原生html处理复杂的表格还是比较重要的。 下面我们来看这一张图&#xff1a; 我们可以看到有些表头项的规格不太一样&#xff0c;有1*1 2*…

【深入理解SpringCloud微服务】Spring-Cloud-OpenFeign源码解析(下)——LoadBalancerFeignClient详解

【深入理解SpringCloud微服务】Spring-Cloud-OpenFeign源码解析&#xff08;下&#xff09;——LoadBalancerFeignClient详解 RxJava简单介绍RxJava示例Observable与Subscriber相关方法介绍Observable.create(OnSubscribe)Observable#just(T value)Observable#concatMap(Func1&…

实战OpenCV之图像显示

基础入门 OpenCV提供的功能非常多&#xff0c;图像显示是最基础也是最直观的一部分。它让我们能够直观地看到算法处理后的效果&#xff0c;对于调试和验证都至关重要。在OpenCV中&#xff0c;图像显示主要依赖于以下四个关键的数据结构和函数。 1、Mat类。这是OpenCV中最基本的…

文心快码(Baidu Comate)快速创建数据可视化图表

给你分享一个免费的编码助手——文心快码 Baidu Comate&#xff01;百度文心大模型&#xff0c;46%采纳率&#xff0c;百度30%的代码都是它写的&#xff01;AI这个大腿&#xff0c;你确定不抱一下&#xff1f;快来安装使用吧&#xff0c;送京东卡&#xff01; https://dwz.cn/3…

高校疫情防控web系统pf

TOC springboot365高校疫情防控web系统pf 第1章 绪论 1.1 课题背景 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。所以各行…

平移矩阵、点绕轴的旋转矩阵、平面直角坐标系旋转矩阵、点绕向量旋转公式(罗德里格斯旋转公式)

平移矩阵 点绕轴的旋转矩阵 平面直角坐标系旋转矩阵 点绕向量旋转公式(罗德里格斯旋转公式) 代码 #include "myPoint.h" #include <cmath> myPoint::myPoint() {m_x m_y m_z 0; }myPoint::myPoint(double x, double y, double z):m_x(x),m_y(y),m_z(z) { }…

探索tailwindcss多主题切换

现在的多主题切换基本上都是用的 css 变量的形式, 而tailwindcss也支持 css 变量定义主题的方式 至于为什么用 tailwindcss变量, 还是因为 tailwind 写类名提示比较方便, 也不需要再在css或者style中去一个个var的形式去写变量了 这里我在assets/style/theme文件夹中创建了三个…

智能与生产力、生产关系的关系

机器学习和自主系统是推动新质生产力和新质生产关系形成的关键技术。它们与这两个概念之间的关系可以从以下几个方面进行分析&#xff1a; 一、机器学习与新质生产力 提升效率和精准度&#xff1a;机器学习通过对大量数据进行分析&#xff0c;能够提供精准的预测和决策支持。这…

MyBatis(初阶)

1.什么是MyBtis MyBatis是持久层框架&#xff0c;⽤于简化JDBC的开发。 2.准备工作 2.1 创建⼯程 数据库: 2.2 配置数据库连接字符串 以application.yml⽂件为例: 2.3 写持久层代码 Data public class UserInfo {private Integer id;private String username;private Stri…