🚩write in front🚩
🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎
🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~2022博客之星Top63~作者周榜84﹣作者总榜704~阿里云专家博主 & 阿里云星级博主~掘金优秀创作者⇿InfoQ创作者⇿51CTO红人⇿全网访问量50w+🏅
🆔本文由 謓泽 原创 如需转载还请通知⚠
📝个人主页-謓泽51Ctop的博客📃
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏-謓泽51Ctop的博客_【C语言】从0~1_51CTO博客🎓
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩
🍑🍑🍑文件的打开和关闭🍑🍑🍑
文件在读写的时候就应该先🍅打开文件🍅
文件在使用结束之后就应该🍅关闭文件🍅
在编写程序的时候,在打开文件的同时,都会返回一个🍅FILE🍅的指针变量指向的文件,也就相当于建立了指针和文件的关系。
ANSIC 规定了使用 fopen() 函数来打开文件,同时 fclose() 函数是用来关闭文件的。
那么接下来介绍下 🍅fopen()🍅
🍑🍑🍑fopen() 打开文件🍑🍑🍑
📢fopen() 函数声明方式如下↓
📢打开文件的方式↓
打开文件名在参数🍅filename🍅中指定的文件,并将其与一个流关联起来,该流可以在将来的操作中由返回的🍅FILE🍅指针识别。
- 这个时候张三同学说"流"是什么啊。
- 张三同学不要着急,刚想说👻那这里说说什么是"流"。
"流":是指信息从外部输入设备(如键盘)向计算机内部(如内存)输入和从内存向外部输出设备(显示器)输出的过程。这种输入输出的过程被形象的比喻为"流"。
流上允许的操作以及如何执行这些操作由🍅mode🍅参数定义。
如果已知返回的流不引用交互式设备(参考🍅setbuf → 设置流缓冲区🍅),则默认情况下它是完全缓冲的。
返回的指针可以通过调用🍅fclose🍅文件解除关联。所有打开的文件在正常程序终止时自动关闭。
🍓🍓参数的介绍🍓🍓
filename → 包含要打开的文件名称的C语言字符串。它的值应该遵循运行环境的文件名规范,并且可以包含一个路径(如果系统支持的话)。
mode → 包含文件访问模式的C语言字符串。它可以是如下所示↓
- "r" read(只读):打开文件进行输入操作。该文件必须存在,文件不在error。
- "w" write(只写):为输出数据,打开一个文本文件。如果指定的文件不存在的话,则会建立一个新的文件。
- "a"追加:打开文件,在文件的末尾输出。输出操作总是在文件的末尾写入数据,并展开它。重新定位操作(fseek, fsetpos,倒带)被忽略。如果文件不存在,则创建该文件。
- "r+"读取/更新:打开一个文件进行更新(包括输入和输出)。该文件必须存在。
- "w+"写入/更新:创建一个空文件并打开以进行更新(包括输入和输出)。如果一个同名的文件已经存在,它的内容将被丢弃,并且该文件将被视为一个新的空文件。
- "a+" append/update(读写):打开一个文件进行更新(包括输入和输出),所有输出操作都在文件的末尾写入数据。重新定位操作(fseek, fsetpos, rewind)影响下一个输入操作,但输出操作将位置移回文件末尾。如果文件不存在,则创建该文件。
🍉返回值🍉
如果文件被成功打开,该函数将返回一个指向🍅file🍅对象的指针,该指针可用于在将来的操作中标识流。
否则,返回一个空指针。在大多数库实现中,🍅errno🍅变量在失败时也被设置为特定于系统的错误代码。
那么在演示 fopen() 打开文件的示例之前,我们先了解下什么是关闭文件。
🍓🍓fclose() 关闭文件🍓🍓
📢 fclose() 函数声明方式如下↓
📢关闭文件的方式↓
关闭与流关联的文件并解除关联。
所有与流关联的内部缓冲区都与流分离并刷新:任何未读输出缓冲区的内容都被写入,任何未读输入缓冲区的内容都被丢弃。
即使调用失败,作为参数传递的流将不再与文件或其缓冲区相关联。
- 参数→stream
指向🍅FILE🍅对象的指针,该对象指定要关闭的流。
🍑🍑🍑fopen()代码示例🍑🍑🍑
接下来我们来打开一个文件来康康,分别示例 r 和 w 代码示例如下↓
运行结果:此时,文件是存在的。
那我们把 test.txt 的文件给进行删除,看看此时的运行结果。
当我们把 test.txt 的文件给进行删除,返回的是空指针。
张三:那我们在 🍅fopen()🍅 的 mode 参数 换成 "w" 来试下看下会出现什么样子的情况。
ヾ(^▽^*)))好哒!
先说下,文件在的情况下。实际上文件在的情况下和上面的情况都是一模一样的,这里就不再追述了,自己可以试下。重点讲下文件没在的情况。
此时,我们运行这段代码看看会有什么神奇的事情会发生(●'◡'●)
让我们来康康运行结果吧,不要眨眼( •̀ .̫ •́ )✧
张三:什么情况,它竟然文件存在,不对啊我们不是把 test.txt 文件删除了。它怎么会存在呢。这......
"张三同学一看你就是没看我上面写的博客"(⌐■_■),你再去上面我写的参数 🍅mode🍅介绍那里在仔细的看看。
张三:原来如此,那我们赶紧看看那个文件不存在建立了一个新的文件没有。好的(☆-v-)
从上述截屏当中我们可以发现,它自己雀氏是新建了一个 test.txt 的文件。
张三:这该不会是你偷偷创建的吧(doge),我:🔥🔥🔥
当然,这里还有很多参数🍅mode🍅感兴趣的小伙伴们,可以自己尝试下。这里就不再一一介绍了。不然,有点多,博主手痛不想打这么多的字(๐॔˃̶ᗜ˂̶๐॓)