【C语言】手把手教你文件操作

news2024/11/28 7:48:01

文章目录

  • 一、前言
  • 二、文件的打开和关闭
    • 1. fopen函数
    • 2. fclose函数
  • 三、文件的顺序读写
  • 四、文件的随机读写
    • 1. fseek函数
    • 2. ftell函数
    • 3. fwind函数

一、前言

程序运行时,数据存放在内存中,而当程序退出后,数据也就不复存在。
想做到数据持久化,我们可以把数据存放在磁盘,或者放到数据库里。
而在C语言中,利用文件操作,就可以将数据存放在电脑的硬盘上。

程序设计中,文件一般分两种:程序文件、数据文件。

  • 程序文件
    • 源文件(.c)
    • 目标文件(windows环境后缀为.obj)
    • 可执行文件(windows环境后缀为.exe)
  • 数据文件
    • 程序运行时,要从中读写数据的文件。

二、文件的打开和关闭

读写之前应该先打开文件,使用结束之后要关闭文件。

1. fopen函数

FILE * fopen ( const char * filename, const char * mode );
  • fopen函数用于打开文件。
  • filename是要打开的文件名,mode是文件的使用方式。
  • FILE是描述文件信息的结构体类型,在头文件stdio.h中定义
  • 打开文件后,函数返回FILE*类型的文件指针。

需要注意,在字符串中表示\时,必须使用转义字符\\
所以filename应该如下图所示:
在这里插入图片描述
文件名由文件路径、文件名主干和文件后缀三个部分组成。
例如对于E:\test.txt来说:

  • E:\是文件路径
  • test是文件名主干
  • .txt是文件后缀

如果filename中省略文件路径,只写文件名主干和文件后缀的话,文件会默认保存在本工程的目录下。
在这里插入图片描述
文件的使用方式有以下这些:
在这里插入图片描述

  • 文本文件是指以ASCII码形式存储的文件,每个字符占1个字节。
    • 如10000这个数据以文本文件形式存储,那么每个数字看作一个字符,总共占5个字节。
  • 二进制文件是指数据以二进制形式存储的文件。
    • 如10000这个数据以二进制文件形式存储,那么只需将10000转换成二进制存入内存中就行了。

2. fclose函数

int fclose ( FILE * stream );
  • fclose函数用于关闭文件。
  • stream是要关闭的文件的文件指针。
  • fclose函数关闭文件后不会置空文件指针,需手动置空。

三、文件的顺序读写

C语言提供了一系列文件输入输出函数。
在这里插入图片描述
注意,这里的输入是从文件中读内容,输出是往文件里写内容
每个函数的具体用法可以查阅文档学习。

四、文件的随机读写

1. fseek函数

int fseek ( FILE * stream, long int offset, int origin );
  • 文件在读写时,文件指针指向的位置是会随着读写而改变的。
  • fseek函数可以用于将文件指针定位到我们想要的位置。
  • stream是文件指针,offset是我们想要设置的文件指针的偏移量。
  • origin是从哪里开始偏移,我们可以设置为SEEK_SET(文件起始位置)、SEEK_CUR(文件指针当前位置)、SEEK_END(末尾)。

2. ftell函数

long int ftell ( FILE * stream );
  • 该函数用于返回文件指针相对于起始位置的偏移量。
  • 我们可以利用ftell函数来获取文件指针当前的位置。

3. fwind函数

void rewind ( FILE * stream );
  • 该函数用于让文件指针回到文件的起始位置。

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

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

相关文章

数据库管理-第七十五期 手把手教你搭19c RAC(20230516)

数据库管理 2023-05-16 第七十五期 手把手教你搭19c RAC1 基础环境2 操作系统配置2.1 /etc/hosts2.2 配置系统挂载2.3 配置本地yum源2.4 操作系统配置2.5 安装预安装RPM包并配置:2.6 创建对应目录2.7 配置时间同步 3 存储挂载3.1 存储环境3.2 存储识别3.3 多路径聚合…

生成一个手绘图为底图的导游图

1 前言 上一篇演示了制作一个简版导游图。简版导游图的优点是制作简单、快速,不需要第三方软件,缺点是略显简陋、不够专业。 本编介绍制作专业导游图的步骤,用手绘图为地图,用图形展现景区信息,能表现出丰富的景区细…

ChatGPT:使用Edge浏览器获取ChatGPT以及如何使用ChatGPT帮你制作PPT

一:前言 ChatGPT:智能AI助你畅聊天地 在现代人日益忙碌的生活中,难免需要一些轻松愉快的聊天来放松身心。而现在,有了 ChatGPT,轻松愉快的聊天变得更加智能、有趣且不受时间、地点限制! 什么是 ChatGPT&…

NSSCTF-[深育杯 2021]Press

下载链接:下载 载入IDA,查看内容 首先进入一个函数进行初始化,进入查看 unsigned __int64 sub_4007B6() {int v1; // [rsp8h] [rbp-48h]int i; // [rspCh] [rbp-44h]char src[56]; // [rsp10h] [rbp-40h] BYREFunsigned __int64 v4; // [r…

【可乐荐书】有趣的矩阵:看得懂又好看的线性代数

本栏目将推荐一些经典的、有趣的、有启发性的书籍,这些书籍涵盖了各个领域,包括文学、历史、哲学、科学、技术等等。相信这些书籍不仅可以让你获得知识,还可以让你感受到阅读的乐趣和魅力。 今天给大家推荐的书籍是:《有趣的矩阵…

【简单DP】CF1420 C1

昨天的CF心态又打崩了 好久没写DP了这道题一发过了 但是大家都会qwq 烦死 Problem - C1 - Codeforces 题意: 给定一个序列,让你找出一个子序列 使得 这个最大,a是子序列 思路: 首先子序列,自然就是DP 然后每个…

品牌活动如何策划,更利于传播?(吸引媒体报道)

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 之前做媒体的时候,参加过无数的媒体活动,现在做媒体传播也给了许多品牌一些建议,有的活动设计的很有趣,有的活动设计的很巧妙,…

响应式设计 MediaQuery和flex

一、MediaQuery(媒体查询)的概念 为不同尺寸的屏幕设定不同的css样式 示例 二、media常用参数 三、媒体查询代码示例 MediaQuery在浏览器中的显示示例 MediaQuery综合案例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8…

Go语言笔记:使用ssh包作为客户端与SSH服务器交互

文章目录 目的基础说明使用演示单次通讯连续通讯&#xff08;远程终端&#xff09; 总结 目的 Golang中可以使用 golang.org/x/crypto/ssh 包作为SSH客户端或者SSH服务使用。这篇文章将简单记录下作为客户端使用的一些内容。 Package ssh implements an SSH client and server…

QT自定义控件折线图、趋势图。

这里提供两种实现方式&#xff0c;一直自绘的自定义控件&#xff0c;一直三方SDK&#xff08;qcustomplot&#xff09;。 这里主要介绍自绘的&#xff0c;它的优点是结构简单&#xff0c;代码逻辑好修改&#xff0c;容易定制&#xff0c;缺点是功能相对单一。三方的qcustomplot…

循迹模块(应用于小车)

1.1循迹模块使用 TCRT5000传感器的红外发射二极管不断发射红外线 当发射出的红外线没有被反射回来或被反射回来但强度不够大时&#xff0c; 红外接收管一直处于关断状态&#xff0c;此时模块的输出端为高电平&#xff0c;指示二极管一直处于熄灭状态 被检测物体出现在检测范…

C++ | 数组拷贝

C | 数组拷贝 文章目录 C | 数组拷贝数组名数组拷贝1.对应位拷贝2.地址位移赋值3. memcpy内存拷贝4.字符数组拷贝 Reference 数组名 C数组间赋值不能直接通过数组名称 randy sesame进行&#xff0c;因为数组名并不是指针&#xff0c;大部分情况下&#xff0c;编译器会隐式转换…

使用nvm 管理node.js版本的安装过程

一个 nodejs 版本管理工具&#xff01;—— nvm 在项目开发过程中&#xff0c;随着框架的不断更新迭代&#xff0c;对一些环境依赖的版本也有影响&#xff0c;部分的老项目可能需要低版本的 node.js 才能正常使用&#xff0c;而后期新开发的项目可能需要更高的 node.js 版本才…

都说2023是测试员的危机年,却不断有人跳槽拿20K+,为什么?

从 2021 年上旬开始触发的经济危机逐渐蔓延到普通人的生活中&#xff0c;裁员、倒闭、跑路俨然已成为刷爆朋友圈的高频热词。随之而来的是一系列因舆论所牵动的各种焦虑感弥漫在人群中&#xff0c;无论是大公司还是之前处于风口浪尖的明星创业公司&#xff0c;几乎无一幸免。聊…

ANR实战案例3 - 应用在部分低端机ANR优化案例

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 文章目录 系列文章目录前言一、Blocked状态1.案例一2.案例二3.案例三 二、高低端机区分1.WebView预加载 三、…

Flink基础介绍-2 架构

Flink基础介绍-1 概述 二、Flink架构2.1 Flink的设计架构2.2 Flink的运行架构2.3 Flink的系统架构 二、Flink架构 2.1 Flink的设计架构 Flink是一个分层的架构系统&#xff0c;每一层所包含的组件都提供了特定的抽象&#xff0c;用来服务于上层组件&#xff0c;Flink的分层体…

搬家货运系统软件开发功能

生活中要用到搬家的场景很多&#xff0c;租房子、买房子、换房子都要搬家&#xff0c;不管是从时间还是专业性上来说&#xff0c;很多人都更愿意找专业的搬家公司来代为处理&#xff0c;于是市面上出现了各类各样的货运搬家软件&#xff0c;让有需求的用户可以直接在线预约搬家…

Java实现网上人才招聘系统【附源码】

网上人才招聘系统 1、概述 3 2、系统分析 4 2.1、问题定义 4 2.2、可行性研究 4 2.2.1、可行性需求分析 4 2.2.2、数据流分析 5 2.2.3、数据字典 6 2.2.4、程序流程图 6 2.2.4、开发进度计划 6 2.3、需求分析 7 2.3.1、功能需求分析 7 2.3.2、数据需求分析 10 2.3.3、性能需求…

Dozer拷贝DO到VO

DO&#xff1a; data object 查出来的数据 VO&#xff1a; value object 要展示的数据&#xff0c;返回给前端的数据 DO查出来的字段比较多&#xff0c;VO过滤一下返回给前端 工具类Dozer <dependency><groupId>com.github.dozermapper</groupId><arti…

Vue3 router路由跳转传参Json数据,隐藏参数Url不显示跳转内容,使用History 来写,setup语法糖的写法

前言&#xff1a;Vue3中 Router的自2022-8-22 日后不能使用 params传参 —— 可以这么写&#xff0c;但是接收的时候会是空值 —— query可以用但不能用隐藏Url地址内的值&#xff0c;所以我们用History来写 history敲不出来的可以看最下面 这个相当于history模式父级调到子集后…