【进阶C语言】文件操作

一.文件

定义:
 文件属于文件的一种,与普通文件载体不同,文件是以硬盘为载体存储在计算机上的信息集合。文件包括了文档、图片、视频、程序组件等,每个类型的文件都有不同的作用或功用,例如一个程序通常由主程序、动态库、配置文件等组成,这些也是文件,起到支持程序运行的作用

文件包含三部分:
1.文件路径
2.文件后缀
3.文件名

1.文件的功能

 在写程序中,比如说我们写的通讯录,在运行结束时,通讯录的信息会被删除,那有没有方法来存储我们所需要的数据信息呢?答案是肯定的。数据被保存在硬盘中,那这样我们使数据具有了可持续化的属性。这是其中的一种功能.

2.文件的分类

在这里插入图片描述

终端:是我们最终要操作的对象。
比如说:使用printf和scanf函数时,printf的终端为屏幕,scanf的终端为键盘

3.文件路径

绝对路径

定义:
 绝对路径是指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。

比如说:D:\Program Files (x86)\Microsoft Visual Studio\2019这就是一个绝对路径
从起始盘开始到目标文件结束

相对路径

定义:
 相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。使用相对路径可以为我们带来非常多的便利。

比如:D:\Program Files (x86)\Microsoft Visual Studio\2019
如果你的文件在D:\Program Files (x86)\Microsoft Visual Studio里面则要打开2019
只需:2019
当前路径符号:.\
当前路径的上一路径:… \
以此类推:我们可以找到我们想要的文件

4.文件信息区

在这里插入图片描述

将目标文件的相关信息存放到结构体变量中,这样的变量我们称之为文件信息区
文件信息区的定义在:stdio.h  中。
文件信息区一般用指针进行操作,这里的文件指针指的可不只是文件。

下面这是VS2013的文件信息区的结构变量的命名

struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;

那指针就是FILE*(通常为文件操作函数的返回值)

5.文件缓冲区

在这里插入图片描述

在程序结束时,(VS2019)会主动刷新缓冲区,fclose函数也能主动刷新缓冲区,在没有刷新缓冲区时,数据是不会主动放在文件中的,所以通常在我们编辑文件时,我们通常会按下CTRL+S保存数据到文件中,这时我们就会刷新文件缓冲区,把数据放在文件中。

6.流的概念

 计算机中的流其实是一种信息的转换。是一种高度抽象的概念。
在这里插入图片描述

我们只需将所需的对目标对象根据分类写到流里面去,但是数据怎么到目标,这是怎么实现的我们并不需要了解,我们只需要知道如何使用即可,这大大简化了我们学习编程的门槛。
在打开程序的时候,默认打开三个流:
1.stdin(标准输入流)——键盘
2.stdout(标准输出流)——屏幕
3.stderr(标准错误流)

7.输入输出

在这里插入图片描述

二.文件函数

1.打开与关闭文件

打开文件——fopen

返回类型

FILE*的指针

打开失败时:返回一个空指针。
打开成功指向文件的起始地址。
一般来说要进行对返回值的检查

参数

1.文件路径——const char * filename
2.模式(以哪种形式打开)——const char*mode

打开的模式:
在这里插入图片描述
在这里插入图片描述
补充:

在这里插入图片描述
二进制读写,在模式最后面加上b,或者再+号前面加上b。

关闭文件——fclose

返回类型

int

打开成功:返回0
打开失败:返回EOF(-1)

参数

文件指针——FILE * stream

1.此函数会刷新缓冲区,相当于保存的作用
2.如果严谨的话对返回值也需要进行检查,不过通常都不用

2. 顺序读写

1.输入输出字符

 1. 输入输出字符函数适用于所有的流
 2.在读取字符之后,读取的内容的指针自动向后偏移一个字符的位置,读取下一个字节

输入字符函数——fgetc
返回类型

int

如果读取成功:将字符整形提升为整形返回
失败:返回EOF

函数参数

文件指针——FILE * stream

输出字符函数——fputc
返回类型

int

如果读取成功:将字符整形提升为整形返回
失败:返回EOF

函数参数

文件指针——FILE * stream

2.输入输出字符串

 1. 输入输出字符函数适用于所有的流

输入字符函数——fgets

读取时会为\0留一个字节的位置,所以想要读取的字符数与实际要读的少一

返回类型

char*

读取成功:返回str——与要存入字符数组的首元素的地址保持一致(不管读取多少个字节)。
读取失败:返回空指针

函数参数

1.要读取的字符串的首地址——char*str
2.要读取的字符的个数
3.文件指针——FILE * stream

输出字符函数——fputs

功能:将文件中的信息写到程序中
字符串的\0是不会被放在文件里面的
换行不会自动换行需要自己写\n

返回类型

int

如果读取成功:返回非负值
失败:返回EOF

函数参数

1.要读取的字符串的首元素的地址——const char *str
2.目标文件指针——FILE * stream

3.格式化输入输出

格式化输入——fscanf

(空白符:指空格符、制表符、回车符)就停止的输入函数
一般来说:使用gets函数来弥补这一缺陷

返回类型

int

成功:返回字符个数
比如:int ret = fscanf(pf, "%s “, arr);这里的ret 是 1跟字符串”"里面的字符个数有关
失败:返回EOF

函数参数

1.要读取的文件指针:FILE*stream
2.格式化字符串
3.输入列表

格式化输出——fprintf

功能:将数据转换成字符串存到文件中

返回类型

int

成功:返回读取字符个数
比如:int ret = fprintf(pf, "%s “, arr);这里的ret 是 1跟字符串”"里面的字符个数有关
将arr以%s的形式进行格式化,将格式化的数据放在字符串中。
失败:返回负数

函数参数

1.要写入的字符指针:char* str
2.格式化参数
3.输入列表

4.二进制输入输出

只能适用于文件流中

二进制输入——fwrite

功能:将数据转换成二进制写入文件中

返回类型

size_t

如果返回成功:返回的是成功写入的元素的个数
失败:返回0
一般来说:字符的二进制数据和文本数据是相同的,所以在文档中可以看懂字符,但是其它的数据可就不一定。

函数参数

1.写入文件的数据的地址——const void * ptr
2.写入数据的大小——size_t size
3.要写入的数据的个数——size_t count
4.写入的文件指针——FILE * stream

二进制输入——fread

功能:将二进制数据转换成相应格式到内存中。

返回类型

size_t

如果返回成功:返回的是成功写入的元素的个数
失败:返回0
一般来说:字符的二进制数据和文本数据是相同的,所以在文档中可以看懂字符,但是其它的数据可就不一定。

函数参数

1.读取文件的数据的地址——const void * ptr
2.读取数据的大小——size_t size
3.要读取的数据的个数——size_t count
4.读取的文件指针——FILE * stream

3.随机读写

1.fseek

功能:根据文件指针的位置和偏移量来定位文件指针

返回类型

int

成功返回0
失败返回非0值

参数

1.要读取的文件指针——FILE * stream
2.偏移的大小(左负右正)——long int offset
3.偏移的起点——int origin

偏移的起点:
1.“ SEEK_CUR ”:表示文件指针当前位置;
2.“ SEEK_END ”:表示文件末尾的位置;
3. “ SEEK_SET”:表示文件开始位置。

2.ftell

功能:返回文件指针相对于起始位置的偏移量

返回类型

long int

返回成功:当前位置的偏移量
返回失败:-1L这是long int的-1

函数参数

文件指针——FILE * stream

3.rewind

功能:让文件指针的位置回到文件的起始位置

返回类型

void

函数参数

文件指针——FILE * stream

4.错误函数

1.ferror

功能:检查是否在读写过程中出错

返回类型

int

如果有错返回0
如果没错返回非0值

函数参数

文件指针——FILE * stream

2.feof

功能:检查是否因读取到文件结束标志而出错

返回类型

int

如果有错返回0
如果没错返回非0值

函数参数

文件指针——FILE * stream

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言进阶高级编程PDF》是一本以C语言为主题的进阶级别编程书籍,旨在帮助读者提升C语言编程水平并掌握更高级的编程技巧和思维方式。 该PDF书籍的内容包括但不限于以下几个方面: 1. 数据结构与算法:介绍了常用数据结构(如链表、栈、队列、树等)的实现原理和使用方法,以及一些常见算法(如排序、查找等)的实现。 2. 指针与内存管理:探讨了指针的概念、指针和数组、指针和函数等相关内容,以及如何进行动态内存管理和资源释放。 3. 文件操作:介绍了C语言中对文件的读写操作方法,包括文件的打开、写入、读取和关闭等。 4. 高级函数和宏:介绍了C语言中的函数指针、回调函数、宏定义等高级编程技巧,以及如何利用宏定义提高代码的可读性和可维护性。 5. 库函数和系统调用:详细介绍了C语言标准库函数和一些系统调用的使用方法,如字符串处理函数、数学函数、时间函数等。 6. 多线程和进程:探讨了C语言中多线程和进程的概念和使用方法,包括线程的创建与同步、进程的创建与间通信等。 通过阅读《C语言进阶高级编程PDF》,读者可以拓宽自己的C语言知识面,学习更高级和更复杂的编程技巧,提升自己在C语言编程方面的能力和应用水平。无论是对于初学者还是有一定经验的C语言开发者来说,这本书都是一本很有价值的参考资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值