深度剖析 —— 文件操作
系列文章目录深度剖析数据深度剖析递归深度剖析结构体深度剖析动态内存管理深度剖析文件操作深度剖析预处理文章目录系列文章目录前言一、示例问题通讯录的信息存储1.通讯录的需求二、文件的存储1.标准 I/O2.文件分类3.文件类型4.文件缓冲区5.文件指针三、文件的打开与关闭1.文件的开关函数- fopen调用结构- fclose调用结构调用示例2.文件的打开方式四、文件的顺序读写1.字符输入输出fputc fgetc- fputc调用结构调用示例- fgetc调用结构调用示例2.文本行输入输出函数fputs fgets- fputs调用结构调用示例- fgets调用结构调用示例3.格式化输入输出函数fprintf fscanf- fprintf调用结构调用示例- fscanf调用结构调用示例4.二进制输入输出函数fwrite fread- fwrite调用结构调用示例- fread调用结构调用示例五、文件的随机读写与结束判定1.文件的随机读写- fseek调用结构- fwind调用结构2.文件的结束判定- feof调用结构总结前言文件是当今计算机系统十分重要的部分。文件用于存储程序、文档、数据、图形、照片、视频、书信、表格和许多其他种类的信息。作为程序员必须会编写创建文件和从文件读写数据的程序。本文将介绍相关的内容。一、示例问题通讯录的信息存储1.通讯录的需求通讯录需要一块可以保存信息的空间当需要时可随时调取我们常用的通讯录在使用之后可以将信息进行存储当我们再次需要调取信息时里面的内容依然存在这时我们就需要一个文件去存储相关信息。文件的内容不一定是程序而是程序运行时读写的数据比如程序运行需要从中读取数据的文件或者输出内容的文件。二、文件的存储1.标准 I/OI/O 的两个级别 (即处理文件访问的两个级别) 底层 I/Olow-level I/O使用操作系统提供的基本 I/O 。标准高级 I/Ostandard high-level I/O使用C库的标准包stdio.h头文件定义。标准 I/O 的优势标准 I/O 有许多专门的函数简化了处理不同 I/O 的问题。可移植性更好。输入和输出都是缓冲的。也就是说一次转移一大块信息而不是一字节信息通常至少512字节。拥有更高的数据传输速率。2.文件分类在程序设计中我们一般谈的文件有两种程序文件、数据文件程序文件:包括源程序文件后缀为.c目标文件windows环境后缀为.obj可执行程序windows环境后缀为.exe。数据文件:文件的内容不一定是程序而是程序运行时读写的数据比如程序运行需要从中读取数据的文件或者输出内容的文件。3.文件类型根据数据的组织形式数据文件被称为文本文件或者二进制文件文本文件:如果要求在外存上以ASCII码的形式存储则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。小明男11111某某大学![请添加图片描述](https://img-blog.csdnimg.cn/e0eb22cafa364885a826c550de69704a.png)二进制文件:数据在内存中以二进制的形式存储如果不加转换的输出到外存就是二进制文件。4.文件缓冲区ANSIC 标准采用“缓冲文件系统”处理的数据文件的所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据则从磁盘文件中读取数据输入到内存缓冲区充满缓冲区然后再从缓冲区逐个地将数据送到程序数据区程序变量等。缓冲区的大小根据C编译系统决定的。5.文件指针缓冲文件系统中关键的概念是“文件类型指针”简称“文件指针”FILE*pf;//文件指针变量每个被使用的文件都在内存中开辟了一个相应的文件信息区用来存放文件的相关信息如文件的名字文件状态及 文件当前的位置等。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的取名FILE。不同的C编译器的FILE类型包含的内容不完全相同但是大同小异。每当打开一个文件的时候系统会根据文件的情况自动创建一个FILE结构的变量并填充其中的信息使用者不必关 心细节。定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区是一个结构体变量。通过该文 件信息区中的信息就能够访问该文件。也就是说通过文件指针变量能够找到与它关联的文件。三、文件的打开与关闭1.文件的开关函数- fopen调用结构FILE*fopen(文件名.后缀,打开方式);返回一个指针需要判断是否为空指针- fclose调用结构intfclose(文件地址);关闭成功返回0否则返回EOF(-1)调用示例FILE*P_Filefopen(文件名.后缀,打开方式);if(P_FileNULL){perror(打开文件失败:);}fclose(P_File);2.文件的打开方式文件使用方式含义如果指定文件不存在“r”只读为了输入数据打开一个已经存在的文本文件出错“w”只写为了输出数据打开一个文本文件建立一个新的文件“a”追加向文本文件尾添加数据出错“rb”只读为了输入数据打开一个二进制文件出错“wb”只写为了输出数据打开一个二进制文件建立一个新的文件“ab”追加向一个二进制文件尾添加数据出错“r”读写为了读和写打开一个文本文件出错“w”读写为了读和写建议一个新的文件建立一个新的文件“a”读写打开一个文件在文件尾进行读写建立一个新的文件“rb”读写为了读和写打开一个二进制文件出错“wb”读写为了读和写新建一个新的二进制文件建立一个新的文件“ab”读写打开一个二进制文件在文件尾进行读和写建立一个新的文件四、文件的顺序读写1.字符输入输出fputc fgetc- fputc调用结构intfputc(int,FILE*stream);向文件写入数据(从末尾开始写入)调用示例fputc(1,P_File);fputc(2,P_File);fputc(3,P_File);- fgetc调用结构intfgetc(FILE*stream);向文件读数据(从开头开始按顺序读读一次向后走一格)读取结束返回EOF正常读取返回ASCII码值调用示例intretfgetc(P_File);printf(%c,ret);2.文本行输入输出函数fputs fgets- fputs调用结构intfputs(constchar*str,File*stream);向文件写入数据(从末尾开始写入)调用示例fputs(abcdef\n,P_File);fputs(123456\n,P_File);- fgets调用结构char*fgets(char*str,intn,FILE*stream)读取数 n 包括/0的位置所以最多读 n - 1 个调用示例fgets(arr,5,P_File);printf(%s\n,arr);fgets(arr,20,P_File);printf(%s\n,arr);3.格式化输入输出函数fprintf fscanf- fprintf调用结构intfprintf(File*stream,后面与printf一致);向文件写入数据(从末尾开始写入)调用示例fprintf(P_File,%s\n,hello world!);- fscanf调用结构intfscanf(File*stream,后面与scanf一致);读取(从开始位置)调用示例fscanf(P_File,%s,arr);printf(%s\n,arr);4.二进制输入输出函数fwrite fread- fwrite调用结构intfwrite(要写入的元素的地址,每个元素的大小,元素的数量,File*stream);以二进制的方式写入(字符串以二进制和文本写入结果一样)调用示例fwrite(arr,sizeof(char),20,P_File);- fread调用结构intfread(要读取的元素的地址,每个元素的大小,元素的数量,File*stream);返回读取到的完整元素的个数如果读取到的个数 实际要读的个数则为最后一次读取调用示例fread(arr,sizeof(char),20,P_File);五、文件的随机读写与结束判定1.文件的随机读写- fseek调用结构intfseek(文件,偏移量,偏移的起始位置);确定书写的位置SEEK_CUR - 当前位置SEEK_SET - 开头位置SEEK_END - 结尾位置(当指向结尾时偏移量只能为负)- fwind调用结构intfwind(文件);让文件指针回到起始位置2.文件的结束判定- feof调用结构intfeof(文件地址);是判断读取失败结束还是遇到文件结尾结束文本文件读取是否结束判断返回值是否为EOF或者是否为NULL等。每个函数有每个特定的结束标志。二进制文件的读取结束判断判断返回值是否小于实际要读的个数。总结对于大多数的程序而言文件的相关操作必不可少。标准 I/O 包自动创建输入和输出缓冲区以加快数据传输。多种输入输出方式使得程序更加灵活便捷大大提高了程序的效率同时也兼具良好的可移植性。

相关新闻

Python:JIRA操作

Python:JIRA操作

curlcurl -i https://jira.******.com/ 200 !200:检查server地址curl -i -u "username:password" https://jira.******.com/python jira.exceptions.JIRAError: JiraError HTTP 401 401,"没证明你是谁"(认证失败&#xf…

2026/11/11 22:27:06 阅读更多 →
word页眉页脚,奇偶不同

word页眉页脚,奇偶不同

word页眉页脚的编辑,奇偶不同一点知识补充分页符 分节符 ???格式要求正文页码页眉结果总结一点知识补充 分页符 分节符 ??? 分页符和分节符两者效果看起来没啥区别,都是希望下一段…

2026/10/30 1:41:04 阅读更多 →
OpenCode工具:Windows多语言开发环境配置与管理

OpenCode工具:Windows多语言开发环境配置与管理

1. OpenCode工具定位与核心价值OpenCode作为一款新兴的开发者工具,正在GitHub等开源社区快速走红。它本质上是一个轻量级的代码管理平台,主要解决开发者在Windows环境下进行多语言项目协作时的三大痛点:环境配置复杂:传统开发环境…

2026/11/11 8:45:08 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/10 23:32:01 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/10 23:32:03 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/11 2:31:33 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/11 17:16:37 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/11 17:16:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/10 23:32:10 阅读更多 →

日新闻

周新闻

月新闻