C 中文件的基本操作

C 中文件的基本操作

一.简单介绍

1.1 文件的定义

文件通常是在磁盘或固态硬盘上的一段已命名的存储区,是指存放在外部存储介质上的数据集合

C 把文件看作是一系列连续的字节,每个字节都能被单独读取,并提供了两种文件模式:文本模式和二进制模式。以二进制打开文本时可以逐字节读取文件,文本模式打开时会将文件内容从文本的系统表示法映射为 C 表示法,对 UNIX 与 Linux 系统则没有这种差别

1.2 文件的基本操作

就像将企鹅放进冰箱需要四步顺序 :找到一只企鹅,打开冰箱,放进冰箱,关上冰箱
对文件的基本操作也应该是四步顺序 :先创建一个文件,打开文件,对文件进行读写,关闭文件

1.3 FILE结构体

C语言是通过文件指针变量的操作来实现对文件的具体访问。缓冲文件系统会为每一个文件系统开辟一个“文件信息区”,被定义为FILE类型数据,包含在头文件stdio.h中。FILE 是由系统定义的一个结构体,该结构体中包含了文件名、文件使用方式、当前位置等信息

通过该文件指针(指向FILE类型结构体的指针变量)能够找到与它相关的文件

typedef struct iobuf {
char *_ptr;      //文件输入的下一个位置
int _cnt;        //当前缓冲区的相对位置
char *_base;     //文件的起始位置
int _flag;       //文件标志
int _file;       //文件的有效性验证
int  _charbuf;   //检查当前缓冲区状况
int _bufsiz;     //缓冲区大小
char *tmpfname;  //临时文件名
}FILE;

二.文件的开关

2.1 打开文件

所谓打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文件,以便进行其他操作

通过 fopen (char *filename, char * mode) 函数,使用给定的模式 mode 打开filename 所指向的文件。文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回 NULL

filename–这是 C 字符串,包含了要打开的文件名称
mode–这是 C 字符串,包含了文件访问模式

在这里插入图片描述

2.2 关闭文件

在程序中,当对一个文件的操作使用完毕后,应将其关闭,断开文件指针与该文件之间的联系,防止文件遭到其他操作的破坏

使用 fclose (FILE *fp) 函数将指定的文件关闭,并将FILE文件指针的相关资源及所占用的缓冲区归还给系统。如果文件成功关闭,则该方法返回零。如果失败,则返回 EOF

三.文件的读写

文件的读写是通过读写函数实现的。根据文件的读写方式不同,文件可分为文件的顺序读写和文件的随机读写

顺序读写很好理解;随机读写并非非常随机,是可以移动文件内的位置指针到需要的位置再读写,并非随机找个位置插入进行读写( ゚∀。)

位置指针:
在文件内部有一个位置指针,用来指向当前读写到的位置,也就是读写到第几个字节。在文件打开时,该指针总是指向文件的第一个字节
文件内部的位置指针与C语言中的指针不是一回事。位置指针仅仅是一个标志,表示文件读写到的位置,也就是读写到第几个字节,它不表示地址文件每读写一次,位置指针就会移动一次,它不需要你在程序中定义和赋值,而是由系统自动设置,对用户是隐藏的

3.1 顺序读写

3.1.1.数据块读写函数: fread ( ) 和fwrite ( )
int fread(void* buffer, int size, ingt count, FILE* fp);//读
int fwrite(void* buffer, int size, int count, FILE* fp);//写

buffer : 表示存放在何处与从何处开始存储
size :表示数据块的字节数
count :表示要读写的数据块块数

fread 函数能够从文件指针fp所指向的文件的当前位置开始,一次读入size个字节,重复count次,并将读取到的数据存到buffer开始的内存区中,同时将读写位置指针后移sizecount次。该函数的返回值是实际读取的count值
fwrite 函数能够从buffer所指的内存区开始,一次输出size个字节,重复count次,并将输出的数据存入fp所指的文件中,同时将读写位置指针后移size
count次

3.1.2.字符读写函数: fgetc ( ) 和fputc ( )
int fgetc(FLIE* fp);                                //读
int fputc(char ch, FILE* fp);                       //写

fgetc 函数能够读取文件指针fp目前所指文件位置中的字符,读取完毕,文件指针自动向下移一个字符位置,若文件指针已经到文件结尾,返回-1

fputc 函数能够把字符ch写入文件指针fp所指向文件的位置,成功时返回字符的ASCII码,失败时返回EOF

3.1.3.字符串读写函数: fgets ( ) 和fputs ( )
char* fgets(char* str, int n, FILE* fp);            //读
int fputs(char* str, FILE* fp);                     //写

fgets 函数能够在文件指针fp所指文件位置读取n个字符并放入str字符数组。如果读不到字符串时返回NULL

fputs 函数能够将字符串str写入文件指针fp所指文件的位置。写入数据成功时返回非0值,写入失败时返回EOF

3.1.4.格式化读写函数: fscanf ( ) 和fprintf ( )
int fscanf(FILE* fp,"格式化字符串", 输入项地址表);       //读
int fprintf(FILE* fp, "格式化字符串", 输入项地址表);     //写

fsancf 函数能够从文件指针fp所指向的文件中按照格式字符串指定的格式将文件中的数据送到输入项地址表中。若读取数据成功会返回所读取数据的个数,并将数据按照指定格式存入内存中的变量或数组中,文件指针自动向下移动;若读取失败则返回EOF
fprintf 函数能够将输出项表中的变量值按照格式字符串指定的格式输出到文件指针fp所指向的文件位置

3.2 随机读写

这里简单介绍两个随机读写的函数

3.2.1。fseek ( ) 函数
int fseek(FILE *fp, long offset, int whence);

功能:文件指针由whence地址移到offset的地址

3.2.2.ftell ( ) 函数
long int ftell(FILE *stream)

功能:返回给定流 stream 的当前文件位置

小结

  • 要访问文件必须通过文件指针 ( FILE* ) 把指针和文件名联系起来;
  • C 将输入与输出都看作字节流,如何处理输入流与输出流则取决于所用的函数
  • fread ( ), fwrite ( ) 和其他文件输入输出函数的区别 : fread ( ), fwrite ( ) 函数将二进制数据直接放进输入输出流;其他函数先将非字符数据转化为字符表示后在放入输入输出流
  • fseek ( ) , ftell ( ) 两个函数可以让程序随机访问文件中任意位置

以上。

另:
kochunk1t 学长的这篇博客里面有错别字,文件操作举例的最后还没关闭文件

如果大家发现了我的错别字,请务必不吝指教!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值