文件操作函数

本文详细介绍了文件的概念,包括文本文件和二进制文件的区别,以及程序设计中文件的分类。重点讲解了文件操作的核心函数,如fopen(), fgets(), fwrite(), fread()等,涵盖了文件的打开、读写、定位、关闭和错误处理。适合理解文件I/O操作的开发者阅读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是文件

文件通常是在磁盘或固定硬盘上的一段已命名存储区

文件内容有文本文件,和二进制文件,文本文件是直接将字符串写入文件或从文件中读取字符串,二进制是以二进制模式写入文件,并以二进制模式读取文件

12345通过文本哦是写入就是字符串12345,通过二进制写入就是12345的二进制

在程序设计中,一般谈的文件分为程序文件和数据文件

2.文件操作函数

FILE *

是一个文件指针,FILE是一个结构体类型,包含了文件的一些信息,通过文件指针可以找到文件的地址,对文件进行操作

1.FILE * fopen(文件名, 打开方式)

fopen()函数第一个参数为要打开的文件名,第二个参数为以什么格式打开文件,是一个字符串,打开失败会返回空指针

"r"

以读打开

"w"

以写的方式打开,把现有文件清空,若没有该文件,则创建文件

"a"

以写的模式打开,在现有文件后面追加内容,若没有该文件,则创建文件

"r+"

以更新模式打开文件(可以读写文件)

"w+"

以更新模式打开文件,文件存在则将其清空,不存在就创建一个

"a+"

以更新模式打开,在现有文件末尾添加内容,文件不存在则新建一个,可以读整个文件

"rb""wb""ab""rb+""r+b""wb+""w+b""ab+""a+b"

与上一个类似,二进制模式打开

"wx"、“wbx”、"w+x""wb+x""w+bx"

类似非X模式,但是如果文件存在或以独占模式打开文件,则打开文件失败

2.char getc(FILE *)

从文件中读取一个字符

3.putc(char, FILE */stdout)

将字符输出到文件中或标准输出

4.fclose(FILE *)

关闭文件

5.fprintf (FILE *__restrict __stream, const char *__restrict __fmt, ...)

第一个参数为文件指针,后面两个参数和printf()函数完全相同,将后面的内容以一定格式输出到文件中

FILE *fp;
char words[40];
fprintf(fp, "40s%", words);

将words的内容以40s%的格式输出到fp所指向的文件中

6.int fscanf (FILE *__restrict __stream,const char *__restrict __format, ...)

第一个参数为文件指针,将文件的内容以固定格式输出到字符数组中

FILE *fp;
char words[40];
fscanf(fp, "%s", words);

将fp指向的文件中的字符串写入字符数组words中

7.fgets(char *int n, FILE *)

从文件中读取字符串,直到第一个换行符,或读到n-1个字符或读到文件结尾结束,将其存到第一个参数所指向的字符数组中

8.fputs(char *, FILE *)

将第一个参数指向的字符串输出到第二个参数指向的文件中

9.int fseek (FILE *__stream, long int __off, int __whence);

文件的随即访问,第一个参数文件指针,指向待查找文件,第二个参数为偏移量,表示距起点的距离,第三个参数用来确定起点,可以是SEEK_SET(文件开始处),SEEK_CUR(当前位置),SEEK_END(文件末尾)

10. long int ftell (FILE *__stream) ;

返回参数指向的文件的当前位置距离文件开始位置处的字节数

11.int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);

文件内容可能超过long所表示的范围,所以出现了fgetpos()函数,他将距离起点的字节放在第二个参数指向的内存上,
fpos_t为文件定位类型,根据其他类型定义的
如果成功找到距离起点字节返回0,否则返回非0

11.int fsetpos (FILE *__stream, const fpos_t *__pos);

使用pos指向位置上的fpos_t类型值来设置文件指针指向偏移该值后制定的位置,成功返回0,否则返回非0

12.int ungetc (int __c, FILE *__stream);

把c制定的字符放入输入流中,下次调用标准输入函数时将读取该字符

13.int fflush (FILE *__stream);

刷新缓冲区,将输出缓冲区中未写入的数据发送到__stream指定的文件中,如果__stream为空指针,则刷新所有缓冲区。

14.int setvbuf (FILE *__restrict __stream, char *__restrict __buf,int __modes, size_t __n) __THROW;

创建一个供I/O函数替换使用的缓冲区。打开文件且为对流进行操作前,调用该函数__stream识别待处理的流,buf指向待使用的缓冲区。

15.ize_t fwrite (const void *__restrict __ptr, size_t __size,size_t __n, FILE *__restrict __s);

以二进的方式写
__ptr时一个指针,__ptr指向的内存一块 __size字节,这样的内存块有__n块,将__ptr指向的__n块__size字节的内容写入到__s所指向的文件中

16.fread (void *__restrict __ptr, size_t __size, size_t __n,FILE *__restrict __stream)

__ptr时一个指针,将__s指向的文件中的内容写入到__ptr中指向的内存中,__ptr指向的内存一块 __size字节,这样的内存块有__n块

17.int feof(FILE *__stream);
int ferror (FILE *__stream)

标准输入出错或文件结束都会返回EOF,此函数用来区分正常读到文件结尾结束,还是出错结束,检测到文件结尾返回非0,否则返回0

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小林疋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值