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

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

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文件。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 用wordpress搭建网站的环境要求
  • 首款AI智能体IDE:LangGraph Studio
  • 网络接口 eno1 未连接或未托管
  • 【分立元件】贴片电阻器的故障现象和原理
  • 【Harmony OS 4.0】交互事件(手势事件)
  • 金价多次尝试刷新最高纪录,美国零售销售数据是绊马索
  • IOS 03 纯代码封装自定义View控件
  • 网络协议栈应用层的意义(内含思维导图和解析图通俗易懂超易理解)
  • Python匿名函数之lambda表达式使用详解
  • 解决selenium 常见版本不兼容问题
  • Golang Map 深度剖析:原理、实践与面试要点
  • 计算机毕业设计选题推荐-springboot 基于springboot的宠物健康顾问系统
  • Docker的Fig
  • 详解golang内存管理
  • AttributeError: module numpy has no attribute int报错
  • 《剑指offer》分解让复杂问题更简单
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 345-反转字符串中的元音字母
  • Joomla 2.x, 3.x useful code cheatsheet
  • js 实现textarea输入字数提示
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • nginx 负载服务器优化
  • vue-cli3搭建项目
  • vue中实现单选
  • Xmanager 远程桌面 CentOS 7
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 前端工程化(Gulp、Webpack)-webpack
  • 前端知识点整理(待续)
  • 入手阿里云新服务器的部署NODE
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 我的业余项目总结
  • 运行时添加log4j2的appender
  • C# - 为值类型重定义相等性
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • #laravel 通过手动安装依赖PHPExcel#
  • #考研#计算机文化知识1(局域网及网络互联)
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • $refs 、$nextTic、动态组件、name的使用
  • (C++17) std算法之执行策略 execution
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (第一天)包装对象、作用域、创建对象
  • (分布式缓存)Redis持久化
  • (七)理解angular中的module和injector,即依赖注入
  • (十)T检验-第一部分
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .Net Core和.Net Standard直观理解
  • .Net Core与存储过程(一)
  • .Net 路由处理厉害了
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET4.0并行计算技术基础(1)