C语言——文件
文件操作
概念
文件是指存储在外存储器上(一般代指磁盘,也可以是U盘,移动硬盘等)的数据的集合。
文件操作体现在哪几个方面
1.文件内容的读取
2.文件内容的写入
数据的读取和写入可被视为针对文件进行输入和输出的操作,此时数据就像水流一样从外存储器流向内存,或者从内存流向外存储器,所以系统 形象的称文件操作为文件流
C语言程序对文件的操作采用“文件缓冲机制”。就是说在程序中对文件的数据读写并不是直接 操作文件中的数据,而是系统会为文件在内存中创建“文件缓冲区”,程序对文件的操作,其实是在 缓冲区进行的。
文件的分类
根据数据的存储方式划分:
1. 文本文件(ASCII文件)
2. 二进制文件
文件标识
1. 文件系统中:路径+文件名,举例:d:/aaa/bbb.txt
2. C语言程序中:文件指针(文件类型指针)
语法:FILE *指针变量名文件操作的步骤:
1. 打开文件
2. 文件处理(读写文件)3. 关闭文件
文件的打开与关闭
文件打开,让系统为文件创建文件缓冲区;
函数名:
fopen
头文件:
#include
函数原型:
FILE* fopen(const char *path,const char *mode);
函数功能:
打开文件,并为文件创建缓冲区
函数参数:
path:目标文件的路径
mode:文件打开的方式(读-r、写-w、读写-L)返回值:
成功:返回文件指针 File*(缓冲区首地址)
失败:返回NULL
文件关闭,文件使用完毕,一定要记得释放
函数名:
fclose
头文件:
#include<stdio.h>
函数原型:
int fclose(FILE* fp);
函数功能:
关闭文件,释放缓冲区
函数参数:
fp:已经打开的文件指针
返回值:
成功:返回0
失败:返回EOF(-1)
eg:
/*** 文件的打开与关闭*/
#include <stdio.h>int main(int argc,char** argv)
{// 在命令行执行./a.out的时候,传递一个需要打开的目标文件的地址if(argc < 2){printf("输入有误,请按照<%s 文件路径>格式输入\n",argv[0]);return -1;}// 根据提供的文件路径,打开文件,mode(r,w,rw)FILE* fp = fopen(argv[1],"r");// 校验文件是否读取成功if(!fp){perror("文件打开失败!");return -1;}puts("文件打开成功!");// 关闭打开的文件int ret = fclose(fp);// 校验文件是否关闭成功(很多时候这一步会省略掉)if(ret == -1){perror("文件关闭失败!");return -1;}puts("文件关闭成功!");return 0;
}
文件的读写
单字符读取
函数名:
fgets()
头文件:
#include <stdio.h>
函数原型:
int fgets(File* fp);
函数功能:
从fp代表的文件中获取一个字符
函数参数:
fp:我们需要操作的文件的描述
返回值:
成功:返回读取到的字符
失败:或者文件末尾,返回EOF(-1)
多字符读取
函数名:
fgets()
头文件:
#include<stdio.h>
函数原型:
char *fgets(char *buf, int size, FILE *fp);
函数功能:
从fp代表的文件中获取size-1个字符,放置在buf代表的内存中
函数参数:
buf:内存空间首地址用于存放读取的字节
size:待读取的字符,实际读取size-1
fp:已经打开的文件指针
返回值:
成功:返回buf
失败:文件末尾,返回NULL
单字符写入
函数名:
fputc()
头文件:
#include<stdio.h>
函数原型:
int fputc(int c, FILE *fp);
函数功能:
向fp代表的文件中写入1个字符c
函数参数:
c:待写入的字符
fp:已经打开的文件指针
返回值:
成功:返回c
失败:返回EOF(-1)
多字符写入
函数名:
fputs()
头文件:
#include<stdio.h>
函数原型:
int fputs(const char *s, FILE *stream);
函数功能:
向fp代表的文件中写入1个字符数组s
函数参数:
s:待写入的字符数组(写入缓冲区)
fp:已经打开的文件指针
返回值:
成功:返回非负整数(> 0)
失败:文件末尾,返回NULL
判断文件结束
函数名:
feof(fp)
头文件:
#include <stdio.h>
函数原型:
int feof(fp)
函数功能:
在读如指向的文件时判断是否遇到文件结束。
函数参数:
fp:已打开的文件指针返回值:
成功:返回非负整数(>0)
失败:返回EOE(-1)
数据块的读写(二进制)
fread
头文件:
#include <stdio.h>
函数原型:
size_t fread(void *ptr,size_t size,size_t count,FILE* fp)
函数功能:
从fp代表的文件中以size为单位(一个数据块)读取count个存放在ptr内存中
函数参数:
ptr:内存空间首地址,用于存放读取到数据(缓冲区)
size:数据块大小,以byte为单位
count:待读取的数据块的个数
fp:已打开的文件指针
返回值:
成功:返回实际写入的字节数
失败:返回<0
fwrite
头文件:
#include <stdio.h>
函数原型:
size_t fwrite(count void* ptr,size_t size,size_t count,FILE* fp)
函数功能:
向fp代表的文件中以size为一个数据块,写入count个数据块到fp
函数参数:
ptr:内存空间首地址,用于存放待写入的数据(写入缓冲区)
size:数据块大小,以byte为单位
count:待写入的数据块个数
fp:已打开的文件指针
返回值:
成功:返回实际写入的字节数
失败:返回<0
文件的随机读写
说明:C语言允许程序员在读写文件内容时,可在指定的位置上读写数据文件随机读写的核心操作: 文件位置指针的定位
文件位置指针的移动方法:
rewind
头文件:
#include
函数原型:
void rewind(FILE* fp);
函数功能:
将文件位置指针定位到文件开头
函数参数:
fp: 已经打开的文件指针
返回值:
无
fseek
头文件:
#include
函数原型:
int fseek(FILE *fp, long offset, int whence);
函数功能:
将文件位置指针定位到指定位置
函数参数:
fp: 已经打开的文件指针
offset: 相对于参考位置的偏移位置
whence: 参考位置
SEEK_SET 或 0 表示文件头
SEEK_CUR 或 1 表示当前读写的位置SEEK_END 或 2 表示文件尾
返回值:
成功 :0
失败 : -1
ftell
头文件:
#include
函数原型:
long ftell(FILE *fp);
函数功能:
获取文件位置指针当前位置
函数参数:
fp: 已经打开的文件指针
返回值:
成功 :文件位置指针当前位置
失败 : -1
相关文章:

C语言——文件
文件操作 概念 文件是指存储在外存储器上(一般代指磁盘,也可以是U盘,移动硬盘等)的数据的集合。 文件操作体现在哪几个方面 1.文件内容的读取 2.文件内容的写入 数据的读取和写入可被视为针对文件进行输入和输出的操作…...

视频孪生技术在智慧水利(水务)场景中的典型应用展示
一、智慧水利建设规划 根据水利部编制《“十四五”智慧水利建设规划》,建设数字孪生流域、“2N”水利智能业务应用体系、安全可控水利网络安全防护体系、优化健全水利网信保障体系,建成七大江河数字孪生流域,推进水利工程智能化改造…...
使用kubekey快速搭建k8s集群
项目仓库地址 https://github.com/kubesphere/kubekey/ 支持的Kubernetes Versions https://github.com/kubesphere/kubekey/blob/master/docs/kubernetes-versions.md 安装 选择自己想要下载的版本 https://github.com/kubesphere/kubekey/releases 复制下载链接并下载 示…...

C++——入门基础(上)
目录 一、C参考文档 二、C在工作领域的应用 三、C学习书籍 四、C的第一个程序 五、命名空间 (1)namespace的定义 (2)命名空间的使用 六、C的输入和输出 七、缺省函数 八、函数重载 九、写在最后 一、C参考文档 (1)虽…...
Spring事务失效
类内部访问导致事务不生效原因: 注解Transaction的底层实现是Spring AOP技术,而Spring AOP技术使用的是动态代理。spring事务失效的原因就是动态代理失效的原因: 对于static方法和非public方法,注解Transactional是失效的,因为不…...

Qt QLabel标签制作弹框效果,3s后缓慢自动消失
效果图 初始化说明 void InitStatusTips() {if (NULL statusTips_) {return;}statusTips_->setFixedSize(300, 80);//固定大小statusTips_->move((width() - statusTips_->width()) / 2, height() - 30 - statusTips_->height());//移动位置statusTips_->setA…...
JZ55 二叉树的深度
二叉树的深度_牛客题霸_牛客网 递归代码太简单-一行就可以,可以用二叉树的层序遍历,顺便温习下二叉树层序遍历的写法。 对应leetcode 104题,层序遍历对应leetcode-102自顶向下,leetcode-107自底向上 /* struct TreeNode {int val;struct Tre…...

视频号分销系统搭建教程,源代码+部署上线指南
目录 一、视频号分销是什么? 二、视频号分销系统怎么搭建? 1.系统架构设计 2.部署与上线 3.持续迭代与升级 三、部分代码展示 一、视频号分销是什么? 视频号分销系统是合集了视频号商家的产品,推广达人推广商家的产品可赚取…...
【python】cryptography库学习
【python】cryptography库学习 cryptography学习1-安装2-cryptography学习2.1-fernet的使用2.2-padding填充2.3-Hash2.4-ciphers(对称算法AES为例)2.5-asymmetric(非对称算法RSA为例)函数:generate_private_key类:RSAPrivateKey&a…...

解密!抖音百万粉丝博主三维地图视频都用到了什么GIS数据和技术
引言 在抖音上有许多诸如三维地图科普局、三维地图看世界和三维地图鉴赏等百万粉丝博主靠着三维地图科普城市、景区、人文和地理视频获赞百万,在我们浏览视频时犹如身临其境一般,那么制作这些视频需要什么GIS技术呢?如何利用MapMost技术自己…...
Python知识点:如何使用Kubernetes与Python进行容器编排
Kubernetes 是一个开源的容器编排平台,用于自动化容器化应用的部署、管理和扩展。结合 Python,你可以通过 Kubernetes API 和工具,如 kubectl 和 kubernetes-client 库,来编写和管理容器化应用。以下是如何使用 Kubernetes 和 Pyt…...
Markdown与Word中插入图片的方法及比较
在撰写文档时,无论是技术文档、博客还是学术论文,插入图片都是非常常见的需求。本文将对比两种流行的文本编辑工具——Markdown和Microsoft Word——在插入图片方面的异同点。 Markdown插入图片 如何插入图片 在Markdown中插入图片非常简单࿰…...

Vue3+Vite安装配置tailwindCss
考虑到官网不是很好访问,这里记录一下简单步骤方便小友查阅 1. 安装依赖 npm install -D tailwindcss postcss autoprefixer2. 初始化配置文件 npx tailwindcss init -p3.配置模板路径 /** type {import(tailwindcss).Config} */ export default {content: [&quo…...

大数据学习-Spark基础入门
一、Spark是什么? Stack Overflow的数据可以看出,2015年开始Spark每月的问题提交数量已经超越Hadoop,而2018年Spark Python版本的API PySpark每月的问题提交数量也已超过Hadoop。2019年排名Spark第一,PySpark第二;而十…...
C语言:链表插入
链表的插入分为头插入,中间插入和尾插入。 具体方法如下: #include<stdio.h> #include<stdlib.h>typedef struct node {int s;struct node* pnext; }list;list* addnode(list** pphead, list** ppend, int n) {list* ptemp malloc(sizeof…...

xss 一些例子
目录 XSS 1.Ma Spaghet!编辑 2.Jefff编辑 3.Ugandan Knuckles编辑 4.Ricardo Milos编辑 5.Ah Thats Hawt编辑 6.Ligma编辑 7.Mafia编辑 简单解法就是换一个函数 作者得原意解法 8.Ok, Boomer编辑 XSS 1.Ma Spaghet! 这里接收了一个somebody参数&…...

基于Docker compose部署Confluence 8.3.4及设置数据持久化存储的总结
基于Docker compose部署Confluence 8.3.4及设置数据持久化存储的总结 一、环境信息二、安装部署三、向导 介绍如何基于Docker、Docker Compose的方式安装部署Confluence 8.3.4,并且设置数据的持久化存储。 一、环境信息 操作系统:CentOS 7.9 Docker Ver…...

eNSP 华为交换机生成树协议
华为交换机生成树协议 生成树协议原理与作用 选举一个交换机作为根网桥(生成树的根),计算出到其他所有交换机的最佳路径,把备用路径的端口设为堵塞状态(逻辑上关闭备用路径),当最佳路径故障再…...
flutter事件与消息通知
事件与消息通知 一、原始指针事件(触摸事件) 命中测试 事件阶段:手指按下、手指移动、手指抬起事件冒泡,无法停止冒泡Listener 组件:监听原始触摸事件 onPointerDown:手指按下回调onPointerMove:手指移动回调onPointerUp:手指抬起回调onPointerCancel:触摸事件取消回…...
Oracle PL/SQL存储过程和函数简单示例
以下是关于Oracle PL/SQL存储过程和函数的一些问题和答案: 问题1:什么是Oracle PL/SQL? 答案:Oracle PL/SQL(Procedural Language Extensions to SQL)是Oracle对SQL的过程语言扩展,它是一种编…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...