文件操作

ops/2024/10/22 9:55:28/

1.文件的打开和关闭


文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。
在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系。
ANSI C规定使用fopen函数来打开文件,

成功打开文件后, fopen 将返回一个指向 FILE 类型指针,此指针用于后续的文件操作2。如果打开失败, fopen 将返回 NULL ,并且错误代码会保存在 errno 中。


fclose 来关闭文件。

参数 stream  是指向 FILE  类型指针,指的是要关闭的文件。如果关闭成功, fclose  返回0,否则返回EOF(-1)。

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

const char* filename表示文件名

const char* mode表示文件打开的模式

有如下几种方式

 比如我要打开道德经这个文件只读,就可以像下面这样写

int main(void)
{char ch = 0;FILE* pf = fopen("道德经全文.txt", "r");if (pf == NULL){perror("fopen");return 1;}fclose(pf);return 0;
}

我们接下来就可以看文件的读写了。 

2.文件的顺序读写

 

 我们拿其中fgetc为例

fgetc函数简介 :
fgetc是C语言中的一个文件操作函数,用于从指定的文件中读取一个字符。该函数的声明如下:

int fgetc(FILE *stream);

其中,参数 stream 是一个指向文件指针的指针。

使用方法 :

包含头文件 :在程序中需要包含 stdio.h 头文件。
打开文件 :使用 fopen 函数打开文件,获得文件指针。例如:FILE *fp;
fp = fopen("filename.txt", "r"); 

r模式表示只读读取字符 :调用 fgetc 函数读取文件中的字符2。例如:int ch = fgetc(fp);这将读取filename.txt文件中的一个字符,并将其存储在整数变量ch中。


关闭文件 (可选):如果不再需要文件指针,可以使用 fclose 函数关闭文件。例如:fclose(fp);返回值 :

如果成功读取字符, fgetc 函数返回读取到的字符的ASCII值。
如果到达文件末尾或读取出错,返回 EOF (-1)。

EOF的全称是end of file

那么思考一下,既然fgetc和fputc可以作用于所有的流

那么是不是也可以作用于标准输入流和标准输出流

答案显然是可以的

int main(void)
{int ch = fgetc(stdin);//从键盘(标准输入流)上读取fputc(ch, stdout);//将字符输出(写)到屏幕(标准输出流)return 0;
}

作用和scanf和printf是差不多的。

其实通过文件的知识我们可以去尝试去做一共破损版的的电子书模拟器了

电子书模拟器(破损版一稿)-CSDN博客


http://www.ppmy.cn/ops/112826.html

相关文章

软考中级软件设计师——存储系统

软考中级软件设计师——存储系统 存储系统(层次结构)存储系统分类高速缓存CacheCache组成Cache的三种地址映像Cache的性能分析 主存的扩展位扩展和字扩展主存的编址虚拟存储器磁盘存储器 存储系统(层次结构) 核心:在存…

AI问答-Vue实例属性/实例方法:$refs、$emit、$attrs、$props、$data...

一、本文简介 在Vue.js中,$ 符号通常用于表示Vue实例或组件上的内置属性和方法,这些被称为“实例属性”或“实例方法”。以下是一些常见的以$开头的Vue实例属性和方法 1.1、实例属性 序号实例属性解释1$dataVue实例的数据对象,用于存储组件…

SpringMVC与SpringBoot的区别

SpringMVC 和 Spring Boot 都是 Spring 框架的一部分,但它们的功能和目标有明显的不同。 形式上:SpringBoot是一个自动化配置的工具;SpringMVC是一个web框架。 在搭建项目时:SpringMVC需要手动配置xml文件,同时需要配…

鸿蒙开发之ArkUI 界面篇 十二 背景属性

backgroundColor背景色(纯颜色,没法实现立体感之类高级效果)、 backgroundImage背景图(一般是设计师设计好的图)、 backgroundImageSize背景图尺寸(用于调整背景图的尺寸)、 backgroundImagePosition背景图位置(用于调整背景图的位置)。 背景图的添加是属性backgrou…

深入理解Go语言中的接口定义与使用

在Go语言的编程实践中,接口(Interface) 是一个强大而灵活的特性,它允许我们定义一组方法,而不需要指定这些方法的具体实现。通过接口,我们可以将不同类型的值组合在一起,只要它们实现了接口中定…

F12抓包12:Performance(性能)前端性能分析

课程大纲 使用场景: ① 前端界面加载性能测试。 ② 导出性能报告给前端开发。 复习:后端(接口)性能分析 ① 所有请求耗时时间轴:“网络”(Network) - 概览。 ② 单个请求耗时:“网络”(Network&#xf…

『功能项目』切换职业技能面板【49】

我们打开上一篇48切换职业面板的项目, 本章要做的事情是制作第二职业法师技能面板、第三职业面板并且完成切换 双击打开Canvas进入预制体空间 复制三个技能栏面板 重命名 设置第一技能栏 设置第二职业技能栏 设置第三职业技能栏 修改脚本:ChangeProfess…

深入Redis:复杂的集群

广义的集群,可能说只要是多台机器组成了分布式系统,就可以称之为集群。 狭义的集群,指的是Redis提供的集群模式,这个集群模式之下,主要是解决存储空间不足的问题,以及如何拓展存储空间。 之前的哨兵模式&…