C语言--文件操作
目录一认识文件1文件名2两种文件二文件操作1认识流和标准流2文件指针3文件的打开与关闭三文件的顺序读写1fputc和fgetc2fputs和fgets3,fprintf和fscanf4fwrite和fread四输入流和输出流1所有输入流2所有输出流3格式化数据的含义4两组函数功能的对比5补充函数sprintf和sscanf五文件的随机读写1fseek2ftell3rewind六文件读取结束的判定1判定读取结束2文件的拷贝七文件缓冲区一认识文件1文件名文件名分为三部分文件路径文件名主干文件后缀例如D:/code/test.cD:/code 就是文件路径test就是文件主干 .c就是文件后缀决定了文件的默认打开方式注意1文件名不能包含的字符\ / : * ? |2文件名不一定包含后缀名2两种文件从程序设计的角度有两种文件程序文件、数据文件为什么要使用文件当我们不使用文件时写的程序数据存储电脑的内存中执行完后内存就释放数据就丢失了如果想要数据完整并永久保存就需要使用文件。1程序文件程序文件包括源程序文件后缀为.c、目标文件后缀为.obj、可执行程序后缀为.exe2数据文件数据文件是程序进行执行时需要从中读取数据的文件或者输出内容的文件。其中数据文件又被分为文本文件和二进制文件二进制文件数据在内存中以二进制的形式存储不加任何形式的转化直接存入外存的文件。文本文件内存中的数据经过ASCII码值转化到外存中以ASCII字符形式存储的的文件。数据是如何存储到文件中的如果是字符就以ASCII码值的形式存储如果是数值型的数据则可以以ASCII码值的形式存储也可以以二进制的形式存储例如有整数10000想要进行存储则以ASCII码值存储需要5个字节以二进制存储需要4个字节二文件操作文件操作分为三步1打开文件 2读写文件 3关闭文件在真正进行文件操作前首先要认识流和标准流的概念1认识流和标准流在执行程序时我们需要从外部设备获取数据同时也需要输出数据到外部设备中不同的设备的输入输出的操作方式不一样。如下图为了方便操作引出了流的概念之后我们进行数据的写入和输出只需要操作流即可。标准流C语言在启动时就会默认打开三个流stdin:标准输入流通常来自键盘文件或其他程序的输入scanf就是从标准流中读取数据。stdout:标准输出流通常输出到屏幕文件中printf函数就是将信息输出到标准输出流中。stderr:标准错误流通常输出到屏幕上。stdin、stdout、stderr这三个流的类型都是FILE*称为文件指针。C语言中就是通过FILE*的文件指针来维护流的各种操作的2文件指针每一个文件在内存中都被开辟了一个文件信息区结构体这个文件信息区用来存放文件的相关信息。该结构体通用起名为FILE。该结构体的地址就是文件指针文件指针通过地址找到文件信息区文件信息区再找到文件。创建一个文件指针FILE* pf;3文件的打开与关闭打开文件语法FILE* fopen(const char* filename,const char* mode);filename为打开的文件名主干加后缀mode表示打开方式有以下打开方式关闭文件语法int fclose(FILE* stream);stream为文件指针流举例三文件的顺序读写1fputc和fgetcfputc函数核心功能向文件中写入单个字符语法int putc(int c,FILE* stream);c为要写入的字符stream表示文件指针流成功时返回写入的字符的ASCII码值失败时返回EOF(-1)使用案例fgetc函数核心功能从文件中读取单个字符语法int fgetc(FILE* stream);stream为文件指针流成功时返回读取到的字符的ASCII码值失败时或读取到文件末尾返回EOF(-1)使用案例2fputs和fgetsfputs函数核心功能向文件中写入字符串语法int fputs(const char str,FILE* stream);str是要输入的字符串stream是文件指针流成功时返回非负整数失败时返回EOF(-1)使用案例fgets函数核心功能从文件中读取一行字符串语法char* fgets(char* str,int n,FILE* stream);str为用于存储字符串的字符数组n表示从文件中取出的字符个数算上\0所以实际取出n-1个字符stream表示文件指针流成功时返回指向str的指针失败或者到文件末尾时返回NULL使用案例当n-1小于字符个数时先打印n-1个下次循环打印剩下部分当n-1大于字符个数时打印完即可3,fprintf和fscanf1,fprintf函数类比printfint printf(const char* format……)核心功能与printf类似不过printf是将内容输出到标准输出(一般是屏幕)而fprintf函数是将内容输出到指定的文件流或标准流当中头文件#include stdio.h语法int fprintf(FILE *stream,const char* format……);stream(文件指针 )指向已经打开的文件流format为格式化的字符串与printf中的内容相同返回值成功时返回写入的字符数失败时返回负数运用实例2fscanf函数类比scanfint scanf(const char* format,……核心功能与scanf类似scanf为将格式化数据输出到标准输出流中 fscanf为从指定的输入流文件流或标准流中读取数据头文件#include stdio.h语法int fscanf(FILE *stream,const char* format,……);参数含义与fprintf相同返回值成功时返回读取到的数据个数读到文件末尾或发生错误时返回EOF(-1)运用展示结果张三 20 65.500000上述是输出到文件流当中的情况将内容输出到标准输出流当中的情况:结果在屏幕上打印张三 20 65.5000004fwrite和freadfwrite函数核心功能以二进制的形式将原始内存数据写入到文件当中适合非文本数据图像音频结构体数组等的写入语法size_t fwrite(const void *ptr,size_t size,size_t nmemb,FILE *stream);ptr:要写入的内存块的指针size:要写入的一个数据项的大小nmemb要写入的数据项的数量stream文件指针流指向要被写入的文件返回值成功时输出成功传入的数据项的个数如果与nmemb不相等表示写入出错或到达文件末尾运用实例fread函数核心功能从文件中以二进制形式读取原始内存数据适合读取非文本数据。语法size_t fread(void* ptr,size_t size,size_t nmemb,FILE *stream);参数内容含义与fwrite函数一样不过改成从pf中读取数据到ptr当中返回值成功读取的数据项数量如果返回值小于nmemb,则可能表示1到达文件末尾(EOF)2读取错误3实际读取的项数不足运用实例运行结果1 2 3 4 5四输入流和输出流1所有输入流1标准输入流--stdin--键盘输入函数scanf, getchar, gets.2,文件输入流--FILE* 打开的文件只读r函数fscanf, fgets, fgetc, fread3,字符串输入流--从字符串中读数据函数sscanf2所有输出流1标准输出流--stdout 通常输出到屏幕中 printf就是将内容输出到标准输出流当中2标准错误输出--stderr 打印错误信息(通常是屏幕)3stdprn--不常用3格式化数据的含义格式化数据按照固定格式读写的数据格式化就是将数据转化为人类能看懂的文本用格式说明符控制%d %f %c %s非格式化看不懂供机器使用例如fread,fwrite4两组函数功能的对比5补充函数sprintf和sscanfsprintf函数核心功能把格式化数据转化成字符串传入到字符数组当中头文件#include stdio.h语法int sprintf(char* str,const char* format……)str为指向目标字符数组的指针用于存放生成的字符串。字符指针的大小必须足够大容纳输入的所有的内容。format:名为格式化的字符串与printf中的类似。返回值如果成功则返回写入的字符总数(不包括结尾的\0)如果失败则返回一个负数。sscanf函数核心功能从字符串中读取格式化数据到变量中头文件#include stdio.h语法int sscanf(const char *str,const char format,……)str源字符串从中读取数据format:格式化字符串与scanf中的类似。返回值成功读入并赋值的变量个数一个都没有读入进去返回0在第一个读入前就结束返回EOF(-1)运用实例五文件的随机读写1fseek核心功能根据文件指针的位置和偏移量改变文件指针位置语法int fseek(FILE *stream,long int offset,int origin);stream表示文件指针流offset表示偏移量可正可负origin表示起始位置有三个取值1,SEEK_SET(0)从文件开头开始2,SEEK_CUR(1)从当前位置开始3,SEEK_END(2)从文件末尾开始返回值如果成功返回0如果失败返回非零值运用展示2ftell核心功能返回文件指针相对于起始位置的偏移量语法long int ftell(FILE *stream);stream表示文件指针流返回值如果成功返回相对起始位置的偏移量失败则返回-1L(长整型的-1)运用实例3rewind核心功能让文件指针返回到文件的起始位置语法void rewind(FILE *stream);stream为文件指针流六文件读取结束的判定1判定读取结束打开一个流的时候这个流上有两个标记值1是否遇到文件末尾2是否发生错误这两种情况是文件读取结束的两种原因进行读取时使用这两种函数1fgetc--如果读取正常返回读取到的字符的ASCII码值如果读取失败或遇到文件末尾就返回EOF(-1)2,fgets--如果读取正常返回存储读取到的字符串的字符数组的地址如果读取失败或遇到文件末尾就返回NULL此时再通过两个函数判断文件读取结束的原因1判断是否遇到文件末尾int feof(FILE *stream);如果到达末尾就返回非零值没到达末尾就返回02判断是否发生错误int ferror(FILE *stream);出现错误返回非零没有错误返回0运用实例2文件的拷贝七文件缓冲区内存不会直接向硬盘/文件输入数据而是会先将数据输送到文件缓冲区当中然后当缓冲区装满时再通过文件缓冲区传入硬盘/文件当中。从磁盘/文件中读取数据也是同理会先将数据读取到文件缓冲区当中再将数据逐个传入到程序数据区当中。文件缓冲区的大小由编译器决定。

相关新闻

如何在3分钟内免费激活Windows系统:KMS_VL_ALL_AIO完整指南

如何在3分钟内免费激活Windows系统:KMS_VL_ALL_AIO完整指南

如何在3分钟内免费激活Windows系统:KMS_VL_ALL_AIO完整指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活而烦恼吗?每次开机看到那个烦人的激活提…

2026/10/2 12:19:14 阅读更多 →
TMS320C6474 DSP中断系统深度解析:从事件路由到多核优化实践

TMS320C6474 DSP中断系统深度解析:从事件路由到多核优化实践

1. 中断控制器架构与核心设计思路在嵌入式DSP系统开发中,中断机制的设计直接决定了系统的实时响应能力和整体效率。TMS320C6474作为一款面向高性能计算和实时信号处理的三核DSP,其中断系统的复杂度远超普通的微控制器。我刚接触C6474时,面对手…

2026/10/10 5:36:57 阅读更多 →
从零到一:raylib游戏开发终极入门指南

从零到一:raylib游戏开发终极入门指南

从零到一:raylib游戏开发终极入门指南 【免费下载链接】raylib A simple and easy-to-use library to enjoy videogames programming 项目地址: https://gitcode.com/GitHub_Trending/ra/raylib 你是否曾经梦想过创建自己的游戏,却被复杂的图形AP…

2026/10/8 1:50:11 阅读更多 →

最新新闻

高考数学对数比较大小压轴题:解题技巧与通用框架

高考数学对数比较大小压轴题:解题技巧与通用框架

1. 这道题为什么值得单独拿出来讲2020年高考理科数学全国3卷的选择题第十二题,在考后相当长一段时间里都是讨论度很高的一道题。它考的不是什么偏门冷门的公式,而是一道以对数运算为核心、结合不等式比较大小的题目。很多同学考完之后的第一反应是"…

2026/10/16 0:35:22 阅读更多 →
量化CTA实盘闭环:523-3框架与三层次执行保障

量化CTA实盘闭环:523-3框架与三层次执行保障

简介:本资源是一份面向量化投资从业者、金融工程研究者及进阶交易爱好者的专业级CTA策略入门与进阶指南,系统梳理量化CTA的核心理念、分类框架与实盘落地逻辑。PDF文档共21页,结构清晰,涵盖CTA策略概况、收益来源、趋势跟踪/统计套…

2026/10/16 0:35:22 阅读更多 →
CCF-CSP真题解析:算法建模、C++工程细节与边界处理实战

CCF-CSP真题解析:算法建模、C++工程细节与边界处理实战

简介:本资源是面向CCF-CSP认证考生的真题精解学习资料,聚焦算法设计与编程实战能力提升,特别适合计算机专业学生及算法初学者系统训练。内容涵盖2014至2023年共6套高频真题(如‘小明上学’‘卖菜’‘跳一跳’‘相反数’‘仓库规划…

2026/10/16 0:35:22 阅读更多 →
微电网调度MATLAB工程实现:双时间尺度MILP优化与不确定性建模

微电网调度MATLAB工程实现:双时间尺度MILP优化与不确定性建模

简介:本资源是一套面向电力系统方向本科生、研究生及科研人员的智能微电网调度算法MATLAB实现方案,聚焦可再生能源接入背景下微电网的经济性调度与稳定性优化问题。压缩包共20个文件,含18个核心MATLAB函数(.m)、1个备份…

2026/10/16 0:34:22 阅读更多 →
Windows SDK中国象棋:从双缓冲到Alpha-Beta的完整课设实战

Windows SDK中国象棋:从双缓冲到Alpha-Beta的完整课设实战

简介:基于Windows SDK的象棋程序完整工程源码包,面向C/C初学者及桌面游戏开发入门者,重点演示如何使用Win32 API与GDI实现棋盘绘制、棋子拖放、走棋规则判断和人机对弈。压缩包共38个文件,主要包含C源文件(.cpp)、头文件(.h)、图标…

2026/10/16 0:34:22 阅读更多 →
NC附件上传的本地保存与OSS上传架构设计

NC附件上传的本地保存与OSS上传架构设计

1. 项目概述:为什么“NC传输附件的本地文件保存和文件上传”是企业级系统绕不开的硬需求在某高校实验室参与一个跨部门协同管理平台开发时,我第一次被业务方拉着开了个紧急会——他们刚上线的NC(用友NCCloud)系统里,所…

2026/10/16 0:34:22 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →