[C语言]文件操作

news/2024/2/28 6:07:10


为什么要使用文件操作?

当我们写出了通讯录时,我们会发现当退出重新打开程序后,通讯录并不会加载上一次退出前的信息,所有储存的信息全部会被销毁。我们想要给扫雷和三子棋等程序增加得分系统的时候也是这样,并不能保存用户的最高历史记录得分,而如何存储程序的信息到磁盘上,如何利用程序读取信息,就是文件操作的部分了。

文件名

一个文件要有一个唯一的文件标识,以便用户识别和引用。
文件名包含
3部分:文件路径+文件名主干+文件后缀
例如: c:\code\test.txt

文件的打开和关闭

缓冲文件系统中,关键的概念是 文件类型指针 ,简称 文件指针 ”。
每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是由系统声明的,取名FILE。
FILE* pf;//文件指针变量
定义 pf 是一个指向 FILE类型数据的指针变量。通过该文件信息区中的信息就能够访问该文件。也就是说 通过文件指针变量能够找到与它关联 的文件

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

//打开文件
FILE * fopen ( const char * filename, const char * mode );
//关闭文件
int fclose ( FILE * stream );

mode为打开文件的方式,打开文件的方式如下:


                       打开方式                  含义                                                  如果文件不存在 

r 只读  为了输出数据,打开一个已存在的文本文件 出错
w 只写  为了输出数据,打开一个文本文件创建新文件
a 追加  向文本文件尾部追加数据创建新文件
rb 只读
  为了输入数据,打开一个二进制文件
出错
wb 只写
  为了输出数据,打开一个二进制文件
创建新文件
ab 追加
  向一个二进制文件尾添加数据
出错
r+ 读写
  为了读和写,打开一个文本文件
出错
w+ 读写
  为了读和写,建议一个新的文件
创建新文件
a+ 读写
  打开一个文件,在文件尾进行读写
创建新文件
rb+ 读写
  为了读和写打开一个二进制文件
出错
wb+ 读写
  为了读和写,新建一个新的二进制文件
创建新文件
ab+ 读写
  打开一个二进制文件,在文件尾进行读和写
创建新文件

文件的读写

文件的读写有: fgetc, fputc, fgets, fputs, fscanf, fprintf 等适用于各种输入输出流的函数。

也有:fread, fwrite 这些适用于文件流的指令。

实例:

#include <stdio.h>
int main()
{int a = 10000;FILE* pf = fopen("test.txt", "wb");fwrite(&a, 4, 1, pf);//二进制的形式写到文件中fclose(pf);pf = NULL;return 0;
}
#include <stdio.h>
enum { SIZE = 5 };
int main(void)
{double a[SIZE] = {1.,2.,3.,4.,5.};FILE *fp = fopen("test.bin", "wb"); // 必须用二进制模式fwrite(a, sizeof *a, SIZE, fp); // 写 double 的数组fclose(fp);double b[SIZE];fp = fopen("test.bin","rb");size_t ret_code = fread(b, sizeof *b, SIZE, fp); // 读 double 的数组if(ret_code == SIZE) {puts("Array read successfully, contents: ");for(int n = 0; n < SIZE; ++n) printf("%f ", b[n]);putchar('\n');} else { // error handlingif (feof(fp))printf("Error reading test.bin: unexpected end of file\n");else if (ferror(fp)) {perror("Error reading test.bin");}}fclose(fp);
}


http://www.ppmy.cn/news/63214.html

相关文章

学习【gRPC C++简单示例及代码】

文章目录 0. 启动程序1. 未作修改部分1.1 demo.proto 2. 添加注释部分2.1 server.cc2.2 client.cc 3. 重点修改部分3.1 CMakeLists.txt原始代码3.2 CMakeLists.txt精简修改代码 【gRPC C简单示例及代码】原文链接 已能够进行初步修改 新建fyo文件夹&#xff0c;在fyo中新建bui…

c++之函数对象和谓词

目录 函数对象&#xff1a; 谓词&#xff1a; 一元谓词函数举例如下 二元谓词举例如下 函数对象和函数的区别 一元谓词的案例 二元函数对象案例 二元谓词案例 函数对象&#xff1a; 重载函数调用操作符的类&#xff0c;其对象常称为函数对象&#xff08;function obj…

监听滚动条和触底判断

https://www.cnblogs.com/guobin-/p/16323532.html 判断滚动条是否滚动到页面底部 - 简书 目录 一、滚动监听 二、代码实现&#xff1a; 一、滚动监听 1.监听方法 通过scroll事件进行监听&#xff0c;回调参数为事件 scroll"scrollEvent($event)" 常用于滚动条滚…

回调函数_回顾

函数指针和回调函数 函数指针是指向函数的指针变量。 通常我们说的指针变量是指向一个整型、字符型或数组等变量&#xff0c;而函数指针是指向函数。 函数指针可以像一般函数一样&#xff0c;用于调用函数、传递参数。 直接用指针表示函数&#xff0c;而不是*指针&#xff…

Postman生成代码的小技巧

描述 你还在使用postman吗&#xff1f;你还是一条条复制参数吗&#xff1f;你还是手动录入数据吗&#xff1f;对于一些不经常使用postman的人来说&#xff0c;这个小技巧可以帮助你导入请求&#xff0c;以及转换成开发语言。 教程 1 抓包接口 以CSDN热榜为例&#xff0c;直…

应急响应之系统排查方法

应急响应之系统排查方法 1.系统基本信息Windows系统排查Linux系统排查2.用户信息Windows用户排查Linux用户排查3.启动项Windows启动项排查Linux启动项排查4.计划任务Windows计划任务排查Linux计划任务排查1.系统基本信息 Windows系统排查 windows应急响应,使用微软自带的工具…

元气森林讲出新的“可乐味”故事?

这个五一&#xff0c;一场接一场的音乐节不断拔高假日的声浪。仅成都一市&#xff0c;就开展了298场演出&#xff0c;累计吸引10万余游客市民观看。人潮涌动之间&#xff0c;节日的氛围被拉满。 值得一提的是&#xff0c;音乐节不仅是游客的狂欢&#xff0c;也是消费品牌的盛宴…

Centos8下编译安装最新版ffmpeg解决方案(含Centos8换源阿里云)

文章目录 1、下载FFmpeg源代码2、安装依赖3、配置编译选项&#xff08;关键&#xff09;linux依赖手动编译安装centos8换源阿里云 4、编译源代码5、安装FFmpeg6、验证安装 1、下载FFmpeg源代码 FFmpeg官网&#xff08;https://ffmpeg.org/download.html&#xff09;git clone …

windows下安装OpenCL

由于我的电脑是windows10&#xff0c;显卡是集显Intel UHD Graphics 630。 下载Intel的SDK for OpenCL&#xff0c;下载地址https://software.intel.com/en-us/opencl-sdk/choose-download&#xff0c;也可以在我的资源里面直接下载https://download.csdn.net/download/qq_363…

【1015. 可被 K 整除的最小整数】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给定正整数 k &#xff0c;你需要找出可以被 k 整除的、仅包含数字 1 的最 小 正整数 n 的长度。 返回 n 的长度。如果不存在这样的 n &#xff0c;就返回 -1。 注意&#xff1a; n 不符合 64 位带…

【Java】『蓝桥杯』10道编程题及答案(四)

系列文章 【Java】『蓝桥杯』10道编程题及答案&#xff08;一&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/130223115 【Java】『蓝桥杯』10道编程题及答案&#xff08;二&#xff09; 本文链接&#xff1a;https://blog.csdn.net/y…

重新定义座舱智能化的下半场?谁能抓住弯道超车的窗口期

2020年&#xff0c;高通8155上车之前&#xff0c;行业的定义更多是4G联网互联网生态&#xff08;智能手机的复刻&#xff09;&#xff0c;以斑马智行为代表&#xff1b;而随着集成异构计算、高性能AI引擎&#xff08;8TOPS算力&#xff09;的高通8155密集上车&#xff0c;驱动行…

CRM系统的在线演示是什么?有什么作用?

CRM系统在线演示的作用是帮助企业选择适合的CRM系统。在线演示可以让企业更好地了解CRM系统是如何工作的&#xff0c;以及它如何能使他们的业务受益。在线演示实质上是CRM系统的虚拟演示&#xff0c;您可以清楚的知道它是如何工作的&#xff0c;以及如何通过定制来满足某些业务…

【Leetcode -441.排列硬币 -448.找到所有数组中消失的数字】

Leetcode Leetcode -441.排列硬币Leetcode - 448.找到所有数组中消失的数字 Leetcode -441.排列硬币 题目&#xff1a;你总共有 n 枚硬币&#xff0c;并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯&#xff0c;其第 i 行必须正好有 i 枚硬币。 阶梯的最后一行 可能 是…

TCP/IP网络编程(三)

TCP/IP网络编程读书笔记 第14章 多播与广播14.1 多播14.1.1 多播的数据传输方式及流量方面的优点14.1.2 路由&#xff08;Routing&#xff09;和 TTL&#xff08;Time to Live&#xff0c;生存时间&#xff09;&#xff0c;以及加入组的办法14.1.3 实现多播 Sender 和 Receiver…

知识管理工具,你选择语雀、Baklib、Notion还是FlowUs?

随着信息技术的不断发展&#xff0c;人们对于笔记软件的需求也越来越高。笔记软件可以帮助我们记录生活中的点滴&#xff0c;整理工作中的思路&#xff0c;提高工作效率和生活品质。然而&#xff0c;市面上的笔记软件种类繁多&#xff0c;选择一款适合自己使用的笔记软件也成为…

二级医院不良事件管理源码,事件审核处理、事件提醒、权限控制、外部上报等功能

医疗安全不良事件报告系统源码 技术架构&#xff1a;前后端分离&#xff0c;仓储模式 开发语言&#xff1a;PHP 开发工具&#xff1a;vscode 前端框架&#xff1a;vue2element 后端框架&#xff1a;laravel8 数 据 库&#xff1a;mysql5.7 文末获取联系&#xff01; 医疗…

ES堆内存:大小和交换

Elasticsearch 默认安装后设置的堆内存是 1 GB。对于任何一个业务部署来说&#xff0c; 这个设置都太小了。如果你正在使用这些默认堆内存配置&#xff0c;您的集群可能会出现问题。 这里有两种方式修改 Elasticsearch 的堆内存。最简单的一个方法就是指定 ES_HEAP_SIZE 环境变…

读懂海尔智家大脑:深度体验的本质是深度生活

了解科技行业的读者&#xff0c;应该都对“大脑”这个名词不陌生。 “黑灯工厂”里指挥生产的“工业大脑”&#xff0c;繁忙机场里运筹帷幄的“航空大脑”&#xff0c;还有智慧城市建设的灵魂“城市大脑”…… 如果家也有一颗总揽全局的大脑&#xff0c;生活会发生什么改变呢&a…

大学校友会管理APP系统开发 重温同学梦再叙校园情

互联网技术的深入发展&#xff0c;让各行各业对网络的依赖都逐渐加深&#xff0c;可以说网络在今天已经成为无数个你我他不可或缺的平台。学生时代是一生中最美好的时期&#xff0c;校友是社会高效重要的社会资本和无形资产&#xff0c;校友与校友之间信息交流也需要依靠互联网…
最新文章