【从零开始的 C 语言笔记】第二十九篇-读档 & 写档(1)

上一篇我们介绍了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,表示程序运行成功。
https://ithelp.ithome.com.tw/upload/images/20211211/201425657hC5fresQ4.png
可以看到在这个文件里有我们写入的字串了。
https://ithelp.ithome.com.tw/upload/images/20211211/201425653plnlNjLoi.png


fprintf & printf

其实fprintf跟先前学过的printf(第八篇)很像,其实就是用来写档案版本的「printf」,也可以加入格式指定字 & 特殊字元(第七篇),运用上的差别只在於fprintf的第一位参数,必须是对象为文件、档案的指针,而使用方式与printf并没有其他不同。

可以看到fprintf的文件声明

int fprintf(FILE *stream, const char *format, ...)

printf的文件声明

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相关的模式,一不小心把有要读取内容的档案弄成这模式会整组不见的!真的要注意使用开档的模式!


那我们今天大概介绍完档案读写的「开档」(fopen)部分,希望大家真的在使用档案时要小心,不要一不小心把文件清光光了,那真的是很哭!

下一篇我们继续档案读写的「读」吧!


<<:  VBA 初学笔记(一)

>>:  【前端效能优化】Lighthouse 检测後将图片转为 webp 格式

[Day19] 第十九章-今天来开双B (blade与bootstrap 安装手册)

前言 昨天把简单的view切出来後 我们当然要上 css框架阿!! 我们今天就想办法把blade v...

Day 2 [Python ML] 基础资料处理

前言 在这系列文章中,我会使用Azure来运行所有的程序,如何使用Azure的文章在这里 这边则是使...

12 APCS 实作题考试技巧

在 APCS 历届考试下来,能够拿到五级分的人数仅占所有考生的 1~2%。光是程序设计能力好是不够的...

开源网路钓鱼框架-Gophish(下)

Gophish钓鱼的寄送信件流程如下图 New Campaigns 钓鱼事件 完成前面的设定後接着选...

[Day 4] 来个简单的小应用呗~

前几天教了一些基础概念和如何安装,今天就来个小应用来告诉各位要如何实际应用吧~! 首先创一个.htm...