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

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语言——文件

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

视频孪生技术在智慧水利(水务)场景中的典型应用展示

一、智慧水利建设规划 根据水利部编制《“十四五”智慧水利建设规划》&#xff0c;建设数字孪生流域、“2N”水利智能业务应用体系、安全可控水利网络安全防护体系、优化健全水利网信保障体系&#xff0c;建成七大江河数字孪生流域&#xff0c;推进水利工程智能化改造&#xf…...

使用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的第一个程序 五、命名空间 &#xff08;1&#xff09;namespace的定义 (2)命名空间的使用 六、C的输入和输出 七、缺省函数 八、函数重载 九、写在最后 一、C参考文档 &#xff08;1&#xff09;虽…...

Spring事务失效

类内部访问导致事务不生效原因&#xff1a; 注解Transaction的底层实现是Spring AOP技术&#xff0c;而Spring AOP技术使用的是动态代理。spring事务失效的原因就是动态代理失效的原因: 对于static方法和非public方法&#xff0c;注解Transactional是失效的&#xff0c;因为不…...

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 二叉树的深度

二叉树的深度_牛客题霸_牛客网 递归代码太简单-一行就可以,可以用二叉树的层序遍历&#xff0c;顺便温习下二叉树层序遍历的写法。 对应leetcode 104题&#xff0c;层序遍历对应leetcode-102自顶向下&#xff0c;leetcode-107自底向上 /* struct TreeNode {int val;struct Tre…...

视频号分销系统搭建教程,源代码+部署上线指南

目录 一、视频号分销是什么&#xff1f; 二、视频号分销系统怎么搭建&#xff1f; 1.系统架构设计 2.部署与上线 3.持续迭代与升级 三、部分代码展示 一、视频号分销是什么&#xff1f; 视频号分销系统是合集了视频号商家的产品&#xff0c;推广达人推广商家的产品可赚取…...

【python】cryptography库学习

【python】cryptography库学习 cryptography学习1-安装2-cryptography学习2.1-fernet的使用2.2-padding填充2.3-Hash2.4-ciphers&#xff08;对称算法AES为例&#xff09;2.5-asymmetric(非对称算法RSA为例)函数&#xff1a;generate_private_key类&#xff1a;RSAPrivateKey&a…...

解密!抖音百万粉丝博主三维地图视频都用到了什么GIS数据和技术

引言 在抖音上有许多诸如三维地图科普局、三维地图看世界和三维地图鉴赏等百万粉丝博主靠着三维地图科普城市、景区、人文和地理视频获赞百万&#xff0c;在我们浏览视频时犹如身临其境一般&#xff0c;那么制作这些视频需要什么GIS技术呢&#xff1f;如何利用MapMost技术自己…...

Python知识点:如何使用Kubernetes与Python进行容器编排

Kubernetes 是一个开源的容器编排平台&#xff0c;用于自动化容器化应用的部署、管理和扩展。结合 Python&#xff0c;你可以通过 Kubernetes API 和工具&#xff0c;如 kubectl 和 kubernetes-client 库&#xff0c;来编写和管理容器化应用。以下是如何使用 Kubernetes 和 Pyt…...

Markdown与Word中插入图片的方法及比较

在撰写文档时&#xff0c;无论是技术文档、博客还是学术论文&#xff0c;插入图片都是非常常见的需求。本文将对比两种流行的文本编辑工具——Markdown和Microsoft Word——在插入图片方面的异同点。 Markdown插入图片 如何插入图片 在Markdown中插入图片非常简单&#xff0…...

Vue3+Vite安装配置tailwindCss

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

大数据学习-Spark基础入门

一、Spark是什么&#xff1f; Stack Overflow的数据可以看出&#xff0c;2015年开始Spark每月的问题提交数量已经超越Hadoop&#xff0c;而2018年Spark Python版本的API PySpark每月的问题提交数量也已超过Hadoop。2019年排名Spark第一&#xff0c;PySpark第二&#xff1b;而十…...

C语言:链表插入

链表的插入分为头插入&#xff0c;中间插入和尾插入。 具体方法如下&#xff1a; #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&#xff0c;并且设置数据的持久化存储。 一、环境信息 操作系统&#xff1a;CentOS 7.9 Docker Ver…...

eNSP 华为交换机生成树协议

华为交换机生成树协议 生成树协议原理与作用 选举一个交换机作为根网桥&#xff08;生成树的根&#xff09;&#xff0c;计算出到其他所有交换机的最佳路径&#xff0c;把备用路径的端口设为堵塞状态&#xff08;逻辑上关闭备用路径&#xff09;&#xff0c;当最佳路径故障再…...

flutter事件与消息通知

事件与消息通知 一、原始指针事件(触摸事件) 命中测试 事件阶段:手指按下、手指移动、手指抬起事件冒泡,无法停止冒泡Listener 组件:监听原始触摸事件 onPointerDown:手指按下回调onPointerMove:手指移动回调onPointerUp:手指抬起回调onPointerCancel:触摸事件取消回…...

Oracle PL/SQL存储过程和函数简单示例

以下是关于Oracle PL/SQL存储过程和函数的一些问题和答案&#xff1a; 问题1&#xff1a;什么是Oracle PL/SQL&#xff1f; 答案&#xff1a;Oracle PL/SQL&#xff08;Procedural Language Extensions to SQL&#xff09;是Oracle对SQL的过程语言扩展&#xff0c;它是一种编…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...