深度剖析 —— 文件操作
系列文章目录深度剖析数据深度剖析递归深度剖析结构体深度剖析动态内存管理深度剖析文件操作深度剖析预处理文章目录系列文章目录前言一、示例问题通讯录的信息存储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/8/13 16:43:55 阅读更多 →
word页眉页脚,奇偶不同

word页眉页脚,奇偶不同

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

2026/8/13 16:43:55 阅读更多 →
OpenCode工具:Windows多语言开发环境配置与管理

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

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

2026/8/13 16:43:55 阅读更多 →

最新新闻

回溯法解决装载问题:算法原理、代码实现与优化技巧

回溯法解决装载问题:算法原理、代码实现与优化技巧

1. 项目概述:回溯法在装载问题中的实战拆解 在算法设计与优化的世界里,我们常常会遇到一类看似简单、实则“烧脑”的组合优化问题:给你一堆货物和几辆卡车,如何装车才能最充分地利用运力?或者,给你一个固定…

2026/8/13 22:11:02 阅读更多 →
QT像素级滚动字幕实现:从paintEvent到平滑动画的完整指南

QT像素级滚动字幕实现:从paintEvent到平滑动画的完整指南

1. 项目概述:从“跑马灯”到像素级控制 在桌面应用开发中,滚动字幕,也就是我们常说的“跑马灯”效果,是一个看似简单却暗藏玄机的功能。尤其是在QT框架下,使用 QLabel 这个最基础的控件来实现它,很多开发…

2026/8/13 22:11:02 阅读更多 →
世界模型:AI从感知到决策的认知跃迁与工程实践

世界模型:AI从感知到决策的认知跃迁与工程实践

1. 从“看图说话”到“推演未来”:世界模型为何成为AI新焦点最近和几个做自动驾驶和机器人项目的朋友聊天,发现大家不约而同地都在提一个词:“世界模型”。这让我想起几年前,大家还在为模型能准确识别一张图片里的猫狗而兴奋&…

2026/8/13 22:11:02 阅读更多 →
【ORC】Hudi 的 MOR(Merge-on-Read)表是否支持 ORC 作为基础文件格式?如何配置?

【ORC】Hudi 的 MOR(Merge-on-Read)表是否支持 ORC 作为基础文件格式?如何配置?

Hudi MOR 表支持 ORC 格式深度解析:配置、原理与生产实践 0. 问题引入:从大促用户行为分析说起 用户原始问题:“Hudi 的 MOR(Merge-on-Read)表是否支持 ORC 作为基础文件格式?如何配置?” 在备战年度“618”大促时,我们的用户行为分析平台面临一个严峻挑战:需要实时处…

2026/8/13 22:11:02 阅读更多 →
现代 C++ 异步编程:从零实现一个高性能 ThreadPool (C++20 深度实践)

现代 C++ 异步编程:从零实现一个高性能 ThreadPool (C++20 深度实践)

在高性能 C 开发中,线程池是绕不开的核心基础设施。随着 C20 标准的普及,我们能够以更简洁、更安全的方式实现一个生产级的线程池。本文将带你深度剖析一个基于 std::jthread 的线程池实现,并探讨其背后的架构思考与内存管理机制。1. 核心代码…

2026/8/13 22:11:02 阅读更多 →
开发者技术搜索安全指南:从官方文档到代码验证的全流程实践

开发者技术搜索安全指南:从官方文档到代码验证的全流程实践

最近在技术社区看到不少关于“最可怕的搜索引擎”的讨论,很多开发者,尤其是刚入门的新手,在寻找技术解决方案时,可能会误入一些存在安全风险、隐私泄露或提供恶意代码的网站。本文并非要讨论某个具体的搜索引擎,而是想…

2026/8/13 22:10:02 阅读更多 →

日新闻

Visual Studio新建项目解决方案为空:系统性排查与修复指南

Visual Studio新建项目解决方案为空:系统性排查与修复指南

1. 问题现象与本质剖析如果你是一位.NET开发者,或者正准备踏入这个领域,那么Visual Studio(后面简称VS)绝对是你绕不开的伙伴。但有时候,这个伙伴会跟你开一个不大不小的玩笑:你满怀期待地点击“创建新项目…

2026/8/13 0:00:09 阅读更多 →
长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

说实话,每次提起“长春建设厅网站”这几个字,我心里都挺有感触的。不是因为它有多高大上,也不是因为那里藏着什么不可告人的秘密,恰恰相反,是因为它太“接地气”了,或者说,它是咱们普通人想要在这个城市好好生活、安稳买房时,必须得翻过的一座“数据山”。很多新朋友第…

2026/8/13 0:00:09 阅读更多 →
Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案 【免费下载链接】rdpwrap.ini RDPWrap.ini for RDP Wrapper Library by StasM 项目地址: https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini 你是否曾为Windows家庭版无法支持多用户远程桌面…

2026/8/13 0:00:09 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →