进阶C语言 第六章-------《文件操作》 (fgetc、fputc、fgets、fputs、fprintf、fscanf)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)

简介: 进阶C语言 第六章-------《文件操作》 (fgetc、fputc、fgets、fputs、fprintf、fscanf)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)

绪论

       书接上回,上章的动态内存管理,通过过几个函数来对内存的堆栈开辟一定的空间进行使用,但始终还是借操作系统的内存最终还是要还回去的(当程序结束后),而本章将讲到C语言如何操作文件就是来进行持久化的保存所创建的数据,并且我还会通过学生信息管理系统来进行实操。

image.png

话不多说安全带系好,发车啦(建议电脑观看)。


思维导图:

image.png

要XMind思维导图的话可以私信哈


目录


1.为什么要使用文件

2.什么文件

2.1程序文件:

2.2.数据文件:

2.3文件名

3.文件的打开和关闭

3.1文件指针

3.2打开文件、关闭文件的函数

3.2.1fopen(打开文件函数):

3.2.2fclose(关闭打开的文件):

4.文件的顺序读取

4.1顺序读取函数

4.1.1.fgetc、fputc

4.1.2.fgets、fputs

4.1.3.fprintf、fscanf

4.1.4.fread、fwrite

4.2sscanf、sprintf

5.文件的随机读写

5.1fseek

5.2ftell

5.3.rewind

6.文本文件和二进制文件

7.文件读取结束的判定

7.1.feof函数

8.文件缓冲区

1.为什么要使用文件

使用文件时可以持久化的将数据存储起来,也就可以在程序结束后的下一次运行时调用他(其存放在硬盘上(文件、数据库),不像内存中的数据会自动销毁)

2.什么文件

在磁盘中的文件其实都是文件只是类型不相同

image.png

而在我们程序设计中一般关注两种文件:


2.1程序文件:

一般来说是源文件(后缀为.c文件)、目标文件(后缀为.obj)、可执行程序(后缀为.exe)但在程序文件内的所有文件也都可称为程序文件

image.png

image.pngimage.png

2.2.数据文件:

在一个程序中当我们读取某些文件的数据或者对某些文件进行修改,这些输入(读取)/  输出(修改)的文件就被称为数据文件

image.png

2.3文件名

知识点:


文件名(文件标识)是由:文件路径 + 文件主干 + 文件后缀  组成

image.png

如上这个文件其名是:C:\code\代码仓库\双向循环列表\双向循环列表\test.c


直接写出文件名的路径叫绝对路径  : "C:\\code\\代码仓库\\文件操作章\\文件操作章\\test.txt"


注意双杠


不过一般只用test.c(直接写  主干+后缀  的数据文件这种路径叫做相对路径  :  "test.txt")


假如文件在程序文件上一级则可以在相对路径前+" ../ "    :    "../test.txt"  以此类推,几个就向上找几级


本章节主要讨论的就主要是数据文件,我们应该如何在程序中进行文件的读取和改写。


对于向scanf、printf这类都属于终端型(标准输入输出流)的,而本章是将数据写到文件中去的。


3.文件的打开和关闭

3.1文件指针

知识点:

对于每个文件来说每当我们在程序中打开一个文件时都会开辟一个文件信息区(存放文件的信息),而在C语言的内存中每当我们用函数打开一个文件时就会创建一个结构体来存储这个文件而这个文件的信息就存在文件信息区,并且该结构体的类型的系统声明成为FILE,所以一般都是直接通过FILE * 指针来控制(维护)

image.png

对于文件信息区可以大概的看成上图,并且结构体中的内容我们可以暂不关心(因为在不同的编译器下FILE结构体中的成员是不一样的,但大同小异)。

3.2打开文件、关闭文件的函数

知识点:

3.2.1fopen(打开文件函数):

FILE * fopen ( const char * filename, const char * mode );

filename:文件名

mode:打开方式

"r":读

"w":写

"a":追加

"r+":读/刷新

.....

返回类型是一个FILE  * 的指针,因当打开一个文件时他就会在文件中创建一个文件信息区(打开文件名的信息),所以要把文件信息区的地址返回来(为了方便我们使用信息),所以同时需要一个相同类型的指针来接收如其地址 FLIE* pf = fopen(test.txt,"r");              

并且当打开失败时,会返回一个NULL,所以像动态内存申请空间一样要加上一个判断来判断是否打开成功

3.2.2fclose(关闭打开的文件):

int fclose ( FILE * stream );

stream:是已经打开了的信息区,我们将其地址传过去即可关闭:(fclose(pf));

若关闭成功会返回0,关闭失败则会返回EOF


fopen 和 fclose 的头文件都是#include<stdio.h>

用代码来大概展示一下如何打开和关闭文件:

int main()
{
    //FILE * pf = fopen("C:\\code\\代码仓库\\文件操作章\\文件操作章\\test.txt","r");//绝对路径
    FILE * pf = fopen( "test.txt","r");//相对路径
    if(pf == NULL)//防止开辟失败,访问NULL
    {
        perror("fopen");
        return 1;
    }
    //使用文件 此处省略
    //关闭文件
    fclose(pf);
    pf = NULL;
    return 0;
}

image.png

细节:

文件的打开方式:

文件使用方式 含义 如果指定文件不存在
"r"(只读) 为了输入数据,打开一个已经存在的文本文件 出错
"w" (只写) 为了输出数据,打开一个文本文件 创建一个新的文件
"a"(追加) 向文本文尾添加数据 创建一个新的文件
"rb"(只读) 为输入数据,打开一个二进制文件 出错
"wb" (只写) 为输出数据,打开一个二进制文件 创建一个新的文件
"ab"(追加) 向一个二进制文件尾添加数据 出错
"r+"(读写) 为了读和写,打开一个文件文本 出错
"w+" (读写) 为了读和写,打开一个新的文件 创建一个新的文件
"a+"(读写) 打开一个文件,在文件尾进行读写 创建一个新的文件
"rb+"(读写) 为了读和写打开一个二进制文件 出错
"wb+" (读写) 为了读和写,新 建一个二进制文件 创建一个新的文件

"ab+"(读写)

打开一个二进制文件,在文件尾进行读和写 创建一个新的文件
相关文章
|
15天前
|
存储 C语言
C语言文件操作(2)
【10月更文挑战第2天】
|
13天前
|
程序员 编译器 C语言
C语言底层知识------文件操作
本文详细介绍了文件操作的基本概念,包括文件的分类(程序文件和数据文件,其中着重于数据文件的文本文件和二进制文件),流的概念及其在C程序中的应用,以及标准输入输出流stdin、stdout和stderr的作用。作者通过示例展示了如何使用fopen、fclose和常见的读写函数如fgetc、fputc和fgets进行文件操作。
14 2
|
12天前
|
C语言
C语言学习笔记-知识点总结上
C语言学习笔记-知识点总结上
55 1
|
16天前
|
存储 缓存 编译器
文件操作——C语言
文件操作——C语言
|
6天前
|
存储 C语言
简述C语言文件操作
简述C语言文件操作
6 0
|
11天前
|
存储 文件存储 C语言
深入C语言:文件操作实现局外影响程序
深入C语言:文件操作实现局外影响程序
|
10天前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
25 3
|
1天前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
17 10
|
4天前
|
存储 编译器 C语言
C语言函数的定义与函数的声明的区别
C语言中,函数的定义包含函数的实现,即具体执行的代码块;而函数的声明仅描述函数的名称、返回类型和参数列表,用于告知编译器函数的存在,但不包含实现细节。声明通常放在头文件中,定义则在源文件中。
|
11天前
|
C语言
c语言回顾-函数递归(上)
c语言回顾-函数递归(上)
27 2