上一篇我们介绍了Struct这个语法,也大致介绍它的宣告、使用方式,不晓得大家有没有清楚一些呢!
今天我们来介绍跟实际档案操作有关的--「读档 & 写档」的开档部分!
一般来说我们在操作档案时,会有最基本的两个动作,就是使用前(要对档案做任何事情之前)先做开档的动作「fopen」,以及使用完毕(程序结束前)时也要记得关档「fclose」,其他看是要读档抑或是写档则是看需要再进行。
#include <stdio.h>
int main(){
//开始使用前,设定file文件指针并以w模式开档
FILE *fptr;
fptr = fopen("TheTXT.txt","w");
//写入档案
fprintf(fptr,"this a test txt.");
//程序结束前闭档
fclose(fptr);
return 0;
}
回传0,表示程序运行成功。
可以看到在这个文件里有我们写入的字串了。
其实fprintf跟先前学过的printf(第八篇)很像,其实就是用来写档案版本的「printf」,也可以加入格式指定字 & 特殊字元(第七篇),运用上的差别只在於fprintf的第一位参数,必须是对象为文件、档案的指针,而使用方式与printf并没有其他不同。
可以看到fprintf的文件声明:
int fprintf(FILE *stream, const char *format, ...)
int printf(const char *format, ...)
其实是没什麽太大差异的,所以只要熟悉printf的使用方法,fprintf就不是问题啦!不晓得大家有没有记起来这个小规则了呢,也要记得在使用前开档,而使用完毕要闭档喔!
其中比较特别的是我们在使用fopen进行开档时,需小心的设定好模式,也要注意不同模式下档案使用的方法不同,而如果来先将不同开档模式整理在下表的话,会像这样:
模式 | 说明 | 若文件存在 | 若文件不存在 |
---|---|---|---|
r | 开启档案读取 | 开档、指针指向内容开头 | 错误 |
w | 创建档案写入 | 清除已存在内容、重新指向内容开头 | 创建新档 |
a | 开启或创建档案写至尾端 | 不影响内容,指向内容之尾(续写) | 创建新档 |
r+ | 开起档案读写 | 开档、指针指向内容开头 | 错误 |
w+ | 创建档案读写 | 清除已存在内容、重新指向内容开头 | 创建新档 |
a+ | 开启、创建档案读写 | 不影响内容,指向内容之尾(续写) | 创建新档 |
还有跟以上模式差不多,但为了**二进位档案(.dat档)**的模式:
模式 | 说明 | 若文件存在 | 若文件不存在 |
---|---|---|---|
rb | 开启二进位档案读取 | 开档、指针指向内容开头 | 错误 |
wb | 创建二进位档案写入 | 清除已存在内容、重新指向内容开头 | 创建新档 |
ab | 开启或创建二进位档案写至尾端 | 不影响内容,指向内容之尾(续写) | 创建新档 |
rb+ | 开起二进位档案读写 | 开档、指针指向内容开头 | 错误 |
wb+ | 创建二进位档案读写 | 清除已存在内容、重新指向内容开头 | 创建新档 |
ab+ | 开启、创建二进位档案读写 | 不影响内容,指向内容之尾(续写) | 创建新档 |
从表中我们可以看到各个模式的操作,也应该可以看出指令的规律了,r相关的指令针对於已存在之档案,w相关指令则相当於清空重写。a相关的指令类似於续写档案的概念。
另外提醒大家写档读档真的要小心,尤其是w相关的模式,一不小心把有要读取内容的档案弄成这模式会整组不见的!真的要注意使用开档的模式!
>>: 【前端效能优化】Lighthouse 检测後将图片转为 webp 格式
前言 昨天把简单的view切出来後 我们当然要上 css框架阿!! 我们今天就想办法把blade v...
前言 在这系列文章中,我会使用Azure来运行所有的程序,如何使用Azure的文章在这里 这边则是使...
在 APCS 历届考试下来,能够拿到五级分的人数仅占所有考生的 1~2%。光是程序设计能力好是不够的...
Gophish钓鱼的寄送信件流程如下图 New Campaigns 钓鱼事件 完成前面的设定後接着选...
前几天教了一些基础概念和如何安装,今天就来个小应用来告诉各位要如何实际应用吧~! 首先创一个.htm...