C语言文件操作基本方法
1、文件的分类
ANSI C 的缓冲文件系统
- 缓冲文件系统
缓冲文件系统是指,系统自动地在内存区为每个正在使用的文件开辟一个缓冲区。
从内存向磁盘输出数据时,必须首先输出到缓冲区中。待缓冲区装满后,再一起输出到磁盘文件中。
从磁盘文件向内存读入数据时,则正好相反:首先将一批数据读入到缓冲区中,再从缓冲区中将数据逐个送到程序数据区。 - 非缓冲文件系统
是指系统不自动开辟确定大小的缓冲区,而由程序为每个文件设定缓冲区
C的“缓冲文件系统”自动地在内存中开辟一个文件缓冲区, 在对文件进行处理时, 通过文件缓冲区进行输入与输出。
流式文件
C语言将文件看作是一个一个字符(字节)序列组成的,分为ASCII码文件和二进制文件两种,将这样的文件称为流式文件。
ASCII码文件的每1个字节存储1个字符,因而便于对字符进行逐个处理。但一般占用存储空间较多,而且要花费转换时间(二进制与ASCII码之间的转换)
二进制文件是把内存中的数据,原样输出到磁盘文件中。可以节省存储空间和转换时间,但1个字节并不对应1个字符,不能直接输出字符形式。
文件分类
(1)根据文件的性质(内容),将文件分为程序文件和数据文件。
(2)根据文件的组织形式,可分为顺序存取文件和随机存取文件。
(3)从用户的角度看,文件可以分为普通文件和设备文件两种。
(4)根据文件的存储形式(编码方式),文件分为ASCII码文件和二进制码文件,ASCII文件也称为文本文件。
2、读文件与写文件
读文件是将磁盘文件中的数据传送到计算机内存。
写文件是从计算机内存向磁盘文件中传送数据的操作。
3、文 件 指 针
文件类型 FILE
在C系统的头文件stdio.h中定义了一个名叫FILE的结构体类型。
系统给每个打开的文件都在内存中开辟一个区域,用于存放文件的有关信息(如文件名、文件位置等)。这些信息保存在一个结构类型变量中,该结构类型由系统定义、取名为FILE。
结构类型名“FILE”必须大写
“文件指针”是缓冲文件系统中的一个重要概念。
typedef struct{ short level; /* 缓冲区饱和程度 */unsigned flage; /* 文件状态标志 */char fd; /* 文件号 */unsigned char hold; /* 无缓冲区取消字符输入 */short bsize; /* 缓冲区大小缺省值512 */unsigned char *buffer; /* 缓冲区指针*/unsigned char *curp; /* 当前活动指针 */unsigned istemp; /* 草稿文件标识 */short token; /* 作正确性检验 */} FILE ;
在缓冲文件系统中可以进行文件的打开、关闭、读、写、 定位等操作。要对文件进行相应的操作,必先定义一个指向文件的指针,这个指针称为文件指针
文件指针定义
定义文件指针的形式:
FILE *指针变量标识符;
其中FILE是由系统定义的一个结构类型, 该结构体类型中含有文件名、文件状态和文件当前位置等信息
例如,FILE *fp;
表示fp是指向FILE(文件)的指针变量,通过fp可找到它指向的文件的信息。
4、文件的打开和关闭
对文件进行操作之前,必须先打开该文件;使用结束后,应立即关闭,以免数据丢失。
1.打开文件函数fopen()
FILE *fopen(“文件名”,“操作方式”);
功能:返回一个指向指定文件的指针。
函数原型:stdio.h 。
注:对文件操作的库函数,函数原型均在头文件stdio.h中
文件操作说明
(1)“文件名”是指要打开(或创建)的文件名。如果使用字符数组(或字符指针),则不使用双引号。
用 fp 指向打开的文件后, 就可以用它来访问该文件
FILE *fp;
fp=fopen("data.99","r");
如果不能实现打开指定文件的操作,则fopen()函数返回一个空指针NULL (其值在头文件stdio.h中被定义为0)。为增强程序的可靠性,常用下面的方法打开一个文件:
if((fp=fopen("文件名","操作方式"))==NULL){ printf("can not open this file\n"); exit(0); }
对文件操作的方式(模式)
r ---- 以只读方式打开一个文本文件(该文件已存在)
位置指针指向文件头,从此处读数据
w ------ 以只写方式打开一个文本文件,若该文件不存
在,系统自动建立它,否则,刷新此文件,位
置指针指向文件头,从此处写数据。
a ------- 以追加方式打开一个文本文件,指针指向文件尾
r+ --------以读/写方式打开一个文本文件
打开文件时,读写位置指针指向文件头,以覆
盖方式写文件
w+ ------- 以读/写方式建立一个新的文本文件
对文件操作的方式(模式)
a+ --------以读/写方式打开一个文本文件打开文件时,读从文件头开始;写从文件尾部追加。
rb -------- 以只读方式打开一个二进制文件
wb -------- 以只写方式打开一个二进制文件
ab --------- 以追加方式打开一个二进制文件
rb+ -------- 以读/写方式打开一个二进制文件
wb+ ------- 以读/写方式打开一个新的二进制文件
ab+ -------- 以读/写方式打开一个二进制文件
有些C编译系统,可能并不完全提供上述对文件的操作方式,或采用的表示符号不同,请注意所使用系统的规定。
使用文本文件向计算机系统输入数据时,系统自动将回车换行符转换成一个换行符;
在输出时,将换行符转换成回车和换行两个字符。
使用二进制文件时,内存中的数据形式与数据文件中的形式完全一样,就不再进行转换。
在程序开始运行时,系统自动打开三个标准文件,并分别定义了文件指针:
标准输入文件——stdin:指向终端输入(一般为键盘)。如果程序中指定要从stdin所指的文件输入数据,就是从终端键盘上输入数据
标准输出文件——stdout:指向终端输出(一般为显示器)
标准错误文件——stderr:指向终端标准错误输出(一般为显示器)
文件关闭函数fcolse()
对一个文件操作完成后,要将该文件关闭,以避免文件的数据丢失等错误。
C语言中关闭一个文件通过系统函数fclose实现。
用法: int fclose(FILE *文件指针);
功能:关闭“文件指针”所指向的文件。如果正常关闭了文件,则函数返回值为0;否则,返回值为非0。
例如,fclose(fp);
关闭fp所指向的文件
示例:“w”方式打开文件(文本文件)
#include <stdio.h>
int main()
{ FILE *fp;fp=fopen("mydata1.txt","w");if (fp==NULL){ printf("file open error!\n");exit(0); } else{ printf("file open OK!\n");fclose(fp); }
}
5、文件的读写
字符读写函数fgetc和fputc
fgetc()函数从文件中读入一个字符
用法:int fgetc(文件指针);
功能:从“文件指针”所指向的文件中,读入一个字符,同时将读写位置指针向前移动1个字节(即指向下一个字符)。该函数无出错返回值。
在fgetc函数调用中,读取的文件必须是以读或读写方式打开的。
fputc()函数将一个字符写到文件中
int fputc(字符数据,文件指针);
其中“字符数据”,既可以是字符常量,也可以是字符变量。
功能:将字符数据输出到“文件指针”所指向的文件中去,同时将读写位置指针向前移动1个字节(即指向下一个写入位置)。
如果输出成功,则函数返回值就是输出的字符数据;否则,返回一个符号常量EOF(其值在头文件stdio.h中,被定义为-1)
字符串读写函数fgets和fputs
函数 fgets() 从文件中读一个字符串
用法:char *fgets(指针,串长度+1,文件指针);
功能:从指定文件中读入一个规定长度字符串,存入“字符数组/指针”中,并在尾端自动加一个结束标志‘\0’;同时将读写位置指针向前移动字符串长度个字节
库函数 fputs() 向指定文件输出一个字符串
用法:int fputs(字符串,文件指针);
向指定文件输出一个字符串,同时将读写位置指针向前移动strlength(字符串长度)个字节。
函数返回值: 如果输出成功函数返回值为0;否则,为非0值
数据块读写函数
fread()和fwrite()函数一般用于二进制文件的处理。
读数据块函数fread
fread(buffer,size,count,fp);
其中fp 是文件指针;buffer是一个指针,用来存放输入数据块的首地址;size 表示一个数据块的字节数;count表示要写的数据块块数。
函数功能:从fp所指向文件的当前位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer开始的内存中;同时,将读写位置指针向前移动size * count个字节。
写数据块函数fwrite
fwrite(buffer,size,count,fp);
从buffer开始,一次输出size个字节,重复count次, 并将输出的数据存放到fp所指向的文件中;同时,将读写位置指针向前移动size*count个字节。
函数返回值:如果调用fread()或fwrite()成功,则函数返回值等于count。
位置指针复位函数 rewind
文件中有一个读写位置指针,指向当前的读写位置。每次读写1个(或1组)数据后,系统自动将位置指针移动到下一个读写位置上。 如果想改变系统这种读写规律,可使用有关文件定位的函数。
rewind函数调用形式为
rewind(文件指针);
函数的功能:使文件的位置指针返回到文件头。其中文件指针必须是有效的文件指针,即已指向文件。
格式化读写函数fscanf和fprintf
fscanf()和fprintf()函数的操作对象是指定文件,
scanf()和printf()函数的操作对象是标准输入(stdin)输出(stdout)文件。
按格式化读取函数fscanf()
int fscanf(FILE *fp, char *format, &a1,&a2,…&an)
int fscanf(文件指针, “格式符”, 输入变量首地址表);
调用形式:
fscanf( fp, format, &a1, &a2, &a3);
作用:按format给出的输入控制符,把从fp中读取的内容,分别赋给变元a1,a2,…an。
按格式化写入函数fprintf()
int fprintf(FILE *fp, char *format, a1,a2,…an);
作用: 按format给出的输出控制符,将变元a1,a2,…an的值写入到fp所指的文件中去。
随机读写与fseek()函数
对于流式文件,既可以顺序读写,也可随机读写
所谓顺序读写是指,读写完当前数据后,系统自动将文件的位置指针移动到下一个读写位置上。
所谓随机读写是指,读写完当前数据后,可通过调用fseek()函数,将位置指针移动到文件中任何一个地方。
用法:int fseek(文件指针,位移量,参照点);
功能:将指定文件的位置指针,从参照点开始,移动指定的字节数
相关文章:

C语言文件操作基本方法
1、文件的分类 ANSI C 的缓冲文件系统 缓冲文件系统 缓冲文件系统是指,系统自动地在内存区为每个正在使用的文件开辟一个缓冲区。 从内存向磁盘输出数据时,必须首先输出到缓冲区中。待缓冲区装满后,再一起输出到磁盘文件中。 从磁盘文件向内…...

SQL 相关子查询 和 不相关子查询、Exists 、Not Exists、 多表连接(包含自连接)
不相关子查询 子查询的查询条件不依赖于父查询,称不相关子查询。子查询可以单独运行的 select stu_id,sex,age from student t where sex(select sexfrom studentwhere stu_id10023 )相关子查询 关联子查询 子查询的查询条件依赖于父查询,称为 相关子…...
项目规范 编写规范(范例)
项目目录 目录接口参考 项目目录结构设计,增加部分领域模型后缀强制定义,方便统一编码风格。 controller:请求处理 RestController module:按大业务区分,对多个业务对象数据聚合处理 Component manager:…...

MongoDB数据库操作及操作命令
目录 一、基础概念 二、安装mongod 三、命令交互数据库 (1)数据库命令 (2)集合命令 (3)文档命令 四、Mongoose (1)增加一条数据 (2)插入多个数据 &am…...
Linux命令(62)之tee
linux命令之tee 1.tee介绍 linux命令tee于读取标准输入的数据,并将内容输出为文件 2.tee用法 tee [参数] [filename] tee参数 参数说明-a读取标准输入的数据,并将内容追加到文件,而非覆盖-i忽略中断信号 3.实例 3.1.将ls -l输出内容作为…...

搭建Repo服务器
1 安装repo 参考:清华大学开源软件镜像站:Git Repo 镜像使用帮助 2 创建manifest仓库 2.1 创建仓库 git init --bare manifest.git2.2 创建default.xml文件 default.xml文件内容: <?xml version"1.0" encoding"UTF-8" ?…...

安卓:MMKV——键值存储库
目录 一、MMKV介绍 1.特点和优势: 2.使用指南: 3.依赖包: 二、MMKV的常用方法 1、初始化和获取实例: 2、存储数据: 3、读取数据 4、删除数据 5、其他操作: 三、MMKV的使用例子 MainActivityÿ…...

使用Python将图像转换为PDF:一次性解决您的批量转换需求
导语: 在数字化时代,我们经常需要处理大量的图像文件。将这些图像转换为PDF格式可以方便地存档、分享和打印。本文将介绍如何使用Python编程语言将图像批量转换为PDF,并提供了一个简单易用的图形界面来跟踪转换进度。 准备工作 在开始之前…...

Vue——webpack
webpack 一、Install1.全局安装2.局部安装 二、总结1.打包2.定义脚本3.配置文件定义(webpack.config.js)4.项目重新加载依赖5.webpack打包Css6.style-loader 一、Install 1.全局安装 npm install webpack webpack-cli -g2.局部安装 以项目为单位,一个项…...

springboot房地产管理java购房租房二手房j客户sp源代码mysql
本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 springboot房地产管理 系统1权限:管理员 …...
Gartner 发布影响数据科学和机器学习未来方向重要趋势
出品 | CSDN 云计算 供稿 | Gartner Gartner今日发布了影响数据科学与机器学习(DSML)未来方向的重要趋势。随着DSML行业的快速发展和演变,数据对于人工智能(AI)开发与运用的重要性日益提高,尤其是投资重点…...
72. 编辑距离
题目介绍 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 示例 1: 输入:word1 "horse", word2 &q…...
Android12.0 原生系统SystemUI下拉状态栏和通知栏视图之锁屏通知布局
1.前言 在12.0的系统rom定制化开发中,对于系统原生systemui的锁屏界面的功能也是非常重要的,所以在锁屏页面布局中,也是有通知栏布局的,所以接下来对于息屏亮屏 通知栏布局的相关流程分析,看下亮屏后锁屏页面做了哪些功能 2.原生系统SystemUI下拉状态栏和通知栏视图之锁…...

周末在家值班,解决几个月前遗忘的Bug
问题: 周末被迫在家值班,无聊之际打开尘封已久的Bug清单,发现有Bug拖了几个月还没解决… 场景是这样子的,有个功能是拿Redis缓存热点数据进行展示,暂且称它为功能A,有个另外的功能B,它会去更新缓…...
Shell编程基础(十五)文本三剑客(sed)
文本三剑客(sed) 使用场景基本语法实例命令列表 使用场景 sed提供了一种面交互的方式修改文件内容。 它是一行一行处理,可以通过正则匹配要修改的部分 基本语法 基本语法 sed [-opt] command files(多个文件 空格隔开) sed 使用正则 sed -…...

5,二叉树【p6-p7】
二叉树 5.1二叉树5.1.1例1:用递归和非递归两种方式实现二叉树的先序、中序、后序遍历5.1.1.1递归序的先序、中序、后序遍历先序遍历:中序遍历:后序遍历: 5.1.1.2非递归序的先序、中序、后序遍历先序遍历:中序遍历&…...

【Spring】如果你需要使用重试机制,请使用Spring官方的Spring Retry
文章目录 前言Spring Retry的基本使用第一步,引入Spring Retry的jar包第二步,构建一个RetryTemplate类第三步,使用RETRY_TEMPLATE注意事项 拓展方法降级操作重试策略:时间策略重试策略:指定异常策略 前言 Spring Retr…...
pagehelper 优化自定义分页和排序位置
pagehelper开源地址 https://github.com/pagehelper/Mybatis-PageHelper 1.手写Count查询优化 源码分页count时首先是判断是否存在手写的 {业务查询id}_COUNT 的查询count统计 private Long count(Executor executor, MappedStatement ms, Object parameter,RowBounds rowBound…...
Linux下查询文件夹中文件数量的方法
一、前言 在Linux系统中,我们经常需要查询文件夹中包含多少文件。本文将介绍三种在Linux中查询文件夹中文件数量的方法,帮助你轻松获取所需信息。 二、方法 1、使用ls命令和wc命令 使用ls命令的-l选项和管道操作符|结合wc命令来统计文件数量…...

PS透明屏,在科技展示中,有哪些优点展示?
PS透明屏是一种新型的显示技术,它将传统的显示屏幕与透明材料相结合,使得屏幕能够同时显示图像和透过屏幕看到背后的物体。 这种技术在商业展示、广告宣传、产品展示等领域有着广泛的应用前景。 PS透明屏的工作原理是利用透明材料的特性,通…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...