重生之我在异世界学编程之C语言:深入文件操作篇(上)

大家好,这里是小编的博客频道
小编的博客:就爱学编程

很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!!

函数递归与迭代

  • 引言
  • 正文
        • 一、为什么要用文件
        • 二、文件的分类
        • 三、文件指针
        • 四、文件的打开与关闭
          • 1. 文件的打开
          • 2. 文件的关闭
        • 五、文件缓冲区
  • 快乐的时光总是短暂,咱们下篇博文再见啦!!!不要忘了,给小编点点赞和收藏支持一下,在此非常感谢!!!

引言

在C语言编程中,文件操作是数据处理的重要部分。通过文件,我们可以实现数据的持久化存储和共享。下面将分别从为什么要用文件、文件的分类、文件指针和文件的打开与关闭以及文件缓冲区等方面进行详细介绍,并重点通过多个例子讲清文件的打开和关闭这两个函数。那现在宝子们就跟着小编的步伐一起进入本章知识的学习。Go!Go!Go!

在这里插入图片描述


那接下来就让我们开始遨游在知识的海洋!

正文


一、为什么要用文件

这是因为:

  • 在程序执行过程中,有时需要将数据保存下来供以后使用,或者从外部获取数据进行处理。这时,我们就需要使用到文件。文件是一种用于存储数据的媒介,它可以是磁盘上的物理文件,也可以是内存中的虚拟文件。通过使用文件,我们可以方便地实现数据的长期保存和跨程序的数据共享

二、文件的分类

在C语言中,文件通常按照其内容和用途进行分类,主要包括文本文件二进制文件两种类型:

  1. 文本文件以ASCII码或Unicode码形式存储的文件,主要用于存储人类可读的字符信息,如源代码、文档等。
  1. 二进制文件以二进制形式存储的文件,主要用于存储机器可直接读取和处理的数据,如图像、音频、视频等多媒体文件。

三、文件指针

在C语言中,文件操作是通过文件指针来实现的。 文件指针是一个指向FILE结构体的指针,该结构体包含了文件的各种信息,如文件名、文件位置指示器、文件结束标志等。通过文件指针,我们可以对文件进行各种操作,如读写、定位等。


四、文件的打开与关闭
1. 文件的打开

在C语言中,打开文件需要使用fopen()函数。该函数原型如下:

FILE *fopen(const char *filename, const char *mode);

其中,filename参数是要打开的文件名(包括路径),mode参数指定了文件的打开模式。常见的打开模式有:

  • "r":只读模式。如果文件不存在,则打开失败;如果文件存在,则只能从中读取数据。
  • "w":写模式。如果文件不存在,则以指定的文件名创建新文件;如果文件已存在,则删除原有内容,从头开始写入新数据。
  • "a":追加模式。如果文件不存在,则以指定的文件名创建新文件;如果文件已存在,则在文件末尾追加新数据。
  • "rb""wb""ab":分别表示以二进制方式打开文件,进行读、写、追加操作。

以下是一些使用fopen()函数打开文件的示例:

示例1:以只读模式打开文本文件

#include <stdio.h>int main() {FILE *fp;fp = fopen("text.txt", "r"); // 打开名为"text.txt"的文本文件,以只读模式if (fp == NULL) {printf("无法打开文件
");return 1;} else {printf("文件成功打开
");// 在此处可以进行文件读取等操作fclose(fp); // 关闭文件}return 0;
}

示例2:以写模式打开文件

#include <stdio.h>int main() {FILE *fp;fp = fopen("output.txt", "w"); // 打开名为"output.txt"的文件,以写模式if (fp == NULL) {printf("无法打开文件
");return 1;} else {fprintf(fp, "Hello, World!
"); // 向文件中写入字符串fclose(fp); // 关闭文件}return 0;
}

示例3:以追加模式打开文件

#include <stdio.h>int main() {FILE *fp;fp = fopen("append.txt", "a"); // 打开名为"append.txt"的文件,以追加模式if (fp == NULL) {printf("无法打开文件
");return 1;} else {fprintf(fp, "This is a new line.
"); // 向文件末尾追加字符串fclose(fp); // 关闭文件}return 0;
}

示例4:以二进制方式打开文件

#include <stdio.h>int main() {FILE *fp;fp = fopen("binaryfile.bin", "rb"); // 打开名为"binaryfile.bin"的文件,以二进制方式读取if (fp == NULL) {printf("无法打开文件
");return 1;} else {// 在此处可以进行二进制文件的读取等操作fclose(fp); // 关闭文件}return 0;
}

2. 文件的关闭

在完成文件操作后,我们需要使用fclose()函数来关闭文件。该函数原型如下:

int fclose(FILE *stream);

其中,stream参数是一个指向要关闭的文件的指针。fclose()函数会关闭文件,并释放与该文件相关的资源。如果关闭文件时发生错误,则返回非零值(通常为EOF);否则返回0。

以下是一个使用fclose()函数关闭文件的示例:

示例5:关闭文件

#include <stdio.h>int main() {FILE *fp;fp = fopen("example.txt", "r"); // 打开一个文件if (fp != NULL) {// 在此处可以进行文件读取等操作if (fclose(fp) != 0) { // 关闭文件,并检查是否成功perror("Error closing file"); // 如果关闭失败,打印错误信息}} else {printf("无法打开文件
");}return 0;
}

需要注意的是:

  • 在使用完文件后一定要及时关闭它,以避免资源泄露和潜在的文件损坏问题。同时,如果在打开文件时使用了fopen()函数并且成功打开了文件,那么在关闭文件时一定要确保传递给fclose()函数的指针是与fopen()返回的指针相同的。

五、文件缓冲区

为了提高文件操作的效率,C语言引入了文件缓冲区的概念。当向文件写入数据时,数据首先被写入到缓冲区中,而不是直接写入到磁盘上。只有当缓冲区满或者显式地调用刷新函数(如fflush())时,缓冲区中的数据才会被写入到磁盘上。同样地,当从文件读取数据时,也是先从磁盘上将数据读取到缓冲区中,然后再从缓冲区中读取数据给程序使用。

这种缓冲区机制可以减少磁盘I/O操作的次数,从而提高文件操作的效率。但是,在某些情况下(如需要立即将数据写入磁盘以确保数据安全时),我们可能需要手动刷新缓冲区或者使用无缓冲的文件操作方式。

综上所述:

  • C语言的文件操作涉及多个方面,包括文件的打开与关闭、读写操作、文件指针的使用以及文件缓冲区的处理等。通过掌握这些基础知识,我们可以更加高效地进行文件操作和数据处理工作。

快乐的时光总是短暂,咱们下篇博文再见啦!!!不要忘了,给小编点点赞和收藏支持一下,在此非常感谢!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/63905.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux-16 关于shell(十五)date,clock,hwclock,man,时间管理,命令帮助

想显示一下当前系统上的时间该怎么显示&#xff1f;有一个命令叫做date&#xff0c;来看date命令&#xff0c;如下图&#xff0c; 第一个星期几对吧&#xff1f;然后是月日小时分钟秒&#xff0c;最后一个是年对吧&#xff1f;CST指的是它的时间格式&#xff0c;我这个可以先姑…

【Apache paimon】-- 集成 hive3.1.3 异常

目录 1、场景再现 Step1:在 hive cli beeline 执行创建 hive paimon 表 Step2:使用 insert into 写入数据 Step3:抛出异常 2、原因分析 Step1:在 yarn resource manager 作业界面查询 hive sql mr job 的 yarn log Step2:搜索job 使用的 zstd jar 版本 Step3:定…

严蔚敏老师,一路走好

Hey&#xff0c;小伙伴们&#xff0c;今天我要和大家分享一个令人心痛的消息&#xff0c;但也是我们向一位伟大的学者致敬的时刻。&#xff1a;清华大学计算机教授、《数据结构》编著者严蔚敏 去世&#xff0c;享年 86 岁。她的离去&#xff0c;让无数学子和同行感到深深的哀痛…

Input Action (输入动作) 在虚幻引擎中常用的值类型

1. Digital (bool) 含义: Digital 类型代表一个离散的、二元的输入状态,它只有两种可能的值:true(按下,激活)或 false(未按下,未激活)。 用途: 最常用于表示按键或按钮的按下状态。 适合于开关类型的操作,比如: 跳跃(按键按下时跳跃,松开时不跳跃) 奔跑/行走切换 …

PostgreSQL的学习心得和知识总结(一百六十四)|深入理解PostgreSQL数据库之在 libpq 中支持负载平衡

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

智能机器人技术突破,开启移动领域无限可能

移动机器人已经成为现代社会不可或缺的一部分&#xff0c;在各个领域发挥着越来越重要的作用。在这个过程中&#xff0c;富唯智能机器人以其卓越的技术突破&#xff0c;引领着移动机器人领域的发展潮流。 一、技术突破的体现 1.深度学习与计算机视觉&#xff1a;富唯智能机器人…

解决 “TypeError: ‘tuple‘ object cannot be interpreted as an integer“ 错误提示

错误背景 这个错误通常出现在期望一个整数时&#xff0c;却传入了一个元组&#xff08;tuple&#xff09;。Python 无法将元组解释为整数&#xff0c;因此会抛出 TypeError。 错误示例 python 复制代码 for i in (1, 2, 3): print(range(i)) 运行时会抛出如下错误&#xff1a;…

【C语言】拆数字组成最大数

相信你是最棒哒&#xff01;&#xff01;&#xff01; 文章目录 题目描述 正确代码 法一注释版 简洁版 法二注释版 简洁版 题目描述 任意输入一个自然数&#xff0c;输出该自然数的各位数字组成的最大数。例如&#xff0c;输入 1593 &#xff0c;则输出为 9531 。 输入描述 …

Android14 AOSP 允许system分区和vendor分区应用进行AIDL通信

在Android14上&#xff0c;出于种种原因&#xff0c;system分区的应用无法和vendor分区的应用直接通过AIDL的方法进行通信&#xff0c;但是项目的某个功能又需要如此。 好在Binder底层其实是支持的&#xff0c;只是在上层进行了屏蔽。 修改 frameworks/native/libs/binder/Bp…

汽车车牌识别数据集,支持YOLO,COCO,VOC格式的标注,8493张图片,可识别多种环境下的车牌

汽车车牌识别数据集&#xff0c;支持YOLO&#xff0c;COCO&#xff0c;VOC格式的标注&#xff0c;8493张图片&#xff0c;可识别多种环境下的车牌 数据集分割 训练组82&#xff05; 6994图片 有效集12&#xff05; 999图片 测试集6% 500图片 预处理 自动…

【Golang】如何读取并解析SQL文件

一、背景 在数据库开发与维护过程中&#xff0c;我们经常需要执行大量的SQL语句。有时&#xff0c;这些SQL语句会被保存在一个文件中&#xff0c;以便于批量执行。为了方便地在Go语言中处理这些SQL文件&#xff0c;我们可以编写一个函数来读取并解析SQL文件中的语句。 二、实…

uniapp中打包应用后,组件在微信小程序和其他平台实现不同的样式

今天&#xff0c;我们来介绍一下&#xff0c;uniapp中如何实现打包应用后&#xff0c;组件在微信小程序和其他平台不同的样式&#xff0c;在这里&#xff0c;我们使用背景颜色进行演示&#xff0c;使用 UniApp 提供的 uni.getSystemInfoSync() 方法来获取系统信息&#xff0c;包…

奇奇怪怪的错误-Tag和space不兼容

报错信息如下&#xff1a; TabError: inconsistent use of tabs and spaces in indentation make: *** [Makefile:24: train] Error 1不能按Tab&#xff0c;要老老实实按space 不过可以在编辑器里面改&#xff0c;把它们调整成一致的&#xff1b;

TCP客户端模拟链接websocket服务端

因一些特殊原因研究了下TCP模拟链接websocket。原理上可以连接但具体怎么连接怎么操作就不知道了&#xff0c;需要研究下&#xff0c;以下是个人研究的方案。 用线上和本地地址来做例子&#xff1a; 线上wss地址&#xff1a;wss://server.cs.com/cs/vido/1 本地地址ws://127…

vscode借助插件调试OpenFoam的正确的.vscode配置文件

正确的备份文件位置&#xff1a; /home/jie/桌面/理解openfoam/正确的调试爆轰单进程案例/mydebugblastFoam 调试爆轰案例流体 并且工作区和用户区都是openfoam-7版本 问题&#xff1a;F5以debug模式启动后不停在断点 解决方法&#xff1a; 这里备份一下.vsode正确的配置&…

小程序 - 音乐播放器

微信小程序常用API练习 - 音乐播放器小程序开发笔记 目录 音乐播放器 准备工作 创建项目 配置导航栏 资源文件准备 服务器准备 音乐播放器首页 首页页面 音乐推荐页 播放器页面 播放列表 首页样式 首页脚本实现 功能截图 总结 音乐播放器 “音乐播放器”微信小…

C++ 泛编程—— 自动推导类型 auto

C 自动推导类型 auto 自动推导类型函数模板类模板 C泛编程&#xff0c;也叫通用编程。包括三方面内容&#xff1a; 自动推导类型、 函数模板、 类模板。 自动推导类型 在C11中&#xff0c;赋予了auto全新的含义&#xff0c;不再用于修饰变量&#xff0c;而是作为一个类型指…

【数据分享】2014-2024年我国AOI兴趣面数据(免费获取/来源于OSM地图)

AOI是Area of Interest的简称&#xff0c;顾名思义&#xff0c;指的是互联网电子地图中的兴趣面&#xff0c;主要用于在地图中表达区域状的地理实体&#xff0c;如一个居民小区、一所大学、一个产业园区、一个综合商场、一个医院、一个景区的矢量边界。对于AOI数据&#xff0c;…

题解 - 找子序列(2024.12上海月赛丙组T4)

题目描述 Dave 有一个长度为 n 的非负整数序列 a1-n, 和一个非负整数 m 。 他希望知道是否有一个 a 的非空子序列&#xff0c;使得子序列中所有元素的按位与(bitwise AND)结果为 m。 换言之&#xff0c;他想知道是否存在一个下标序列 i1-k(k ≥ 1),满足 1 ≤ i1 < i2 < …

R学习——因子

目录 1 定义因子&#xff08;factor函数&#xff09; 2因子的作用 一个数据集中的 只需要考虑可以用哪个数据来进行分类就可以了&#xff0c;可以用来分类就可以作为因子。 Cy1这个因子对应的水平level是4 6 8&#xff1a; 1 定义因子&#xff08;factor函数&#xff09; 要…