C语言文件操作(函数使用详解)

目录

1.文件的认知

2.二进制文件和文本文件:

3.流和标准流的概念:

文件指针:

4.文件的打开与关闭:

4.顺序读写函数介绍:

4.1.fgetc和fputc

4.2.fgets和fputs

4.3.fscanf和fprintf

4.4.fread和fwrite

4.5.sscanf和sprintf

5.文件的随机读写

5.1fseek函数:

5.2 ftell函数:

5.3 rewind函数

6.文件结束的判定


1.文件的认知

1.什么是文件?

硬盘上用来储存数据的项目是文件;它分为数据文件和程序文件

程序文件:

包括源程序文件(后缀.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。

数据文件:

文件的内容不一定是程序,而是程序运行时的读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。

2.二进制文件和文本文件:

二进制文件:数据在内存中以二进制的形式存储,若不加转化的输出到外存,就是二进制文件。

文本文件:如果要求在外存上以ASCII码的形式储存,则需要在储存前转化,以ASCII码的形式储存的文件就是文本文件。

数据在内存中可以以什么形式储存呢?

字符均以ASCII码值的形式储存,而整数可以以ASCII码值储存也可以以二进制形式储存。

比如将10000这个数据从 内存里储存到硬盘中的文件里,若不加转化直接以二进制形式储存,那这个文件叫二进制文件。如果加以转化以ASCII码值形式储存,这个文件就叫文本文件

如何打开文本文件和二进制文件:

打开文本文件  选中test.c项目右击鼠标,找到打开所在的文件夹

双击文件,这样默认的打开方式是记事本

打开二进制文件:

在源文件中找到项目,右击选中打开方式,

选中二进制编译器,这样就可以以二进制方式打开文件了


3.流和标准流的概念:

我们程序需要将数据输出到各种外部设备,也需要将外部设备数据输入进来,不同的外部设备输入输出的方式不尽相同。于是抽象出流的概念,我们写的数据都放进流里,我们只从流中抽取我们需要的数据。一般情况从流里写数据或读数据都是先打开流,再进行操作。

概念很抽象,可以这样理解,流就是一条流淌着数据的河,数据输入输出都以这条河为载体,进行什么样的操作,便输入或输出什么样的数据。

标准流:

上文提到,进行数据的输入输出都要先打开流,但是我们平常从键盘上输入数据并没有打开流这一操作啊,其实C语言在启动的时候默认为使用者打开了三个流。

stdin:标准输入流,大多数环境中从键盘输入,scanf就是从标准输入流中读取数据。

stdout:标准输出流,大多数环境中将数据输出到显示器上,printf就是将数据输出到标准输出流中

stderr:标准错误流,大多数环境输出到显示器页面。

文件指针:

每一个被使用的文件在内存中开辟一个文件信息区用来存放文件的信息(文件的名字,路径),这些信息保存在结构体变量当中,这个结构体类型由系统声明:FILE

每当打开一个文件时,系统会自动生成一个FILE结构的变量并填充其中的信息,

一般通过FILE指针来维护FILE结构的变量。

下面创建一个FILE类型的指针变量

FILE*pf;//文件指针变量

定义pf是指向FILE类型的指针变量,可以使pf指向一个文本信息区,通过该文本信息中的信息找到相应的文件。

总结:通过文件指针能找到与它关联的文件。

4.文件的打开与关闭:

文件在使用前要打开使用后要关闭,fopen来打开,fclose用来关闭

FILE*fopen(const char*filename,const char mode);
//filename为要打开的文件名,mode为打开的方式

int fcolse(FILE*stream);
//关闭文件

文件的打开方式有:

举例一种使用方式:

date.txt文件创建成功,并且里面写入了fopen example

4.顺序读写函数介绍:
4.1.fgetc和fputc

fgetc:字符输入函数

Get character from stream:从流中得到字符,用于文件的读入。将文件的字符读取到内存里

FILE * stream:指文件指针   

函数返回值为整型

先在vs中建立一个文件“data.txt”,在文件中输入abcdefgh

fputc:字符输出函数

 Write character to stream:将字符写入流
 int character, FILE * stream :放置字符,放置流(文件名)

4.2.fgets和fputs

fgets:文本行输入函数

Get string from stream:从流中读取字符串。

 char * str:用来存放读取的字符
int num:要获得字符的个数  特别注意读取的字符总是为num-1,因为最后一个为‘/0’
FILE * stream:流/文件

fputs:文本行输出函数

Write string to stream:将字符写进流/文件
const char * str:要写入的字符
FILE * stream:流/文件

4.3.fscanf和fprintf

fscanf:格式化输入函数,适用于所有输出流

Read formatted data from stream:从流中读取格式化数据

FILE * stream:流/文件指针

const char * format:固定的格式化数据

fprintf:格式化输出函数,适用于所有输出流

Write formatted data to stream:将格式化的数据输出到流

const char * format:固定格式格化数据

4.4.fread和fwrite

fread:二进制输入函数,从流中读取数据块,适用于文件

void * ptr:读取数据块放入的位置

size_t size:数据块的大小

size_t count:数据块的个数

fwrite:二进制输出文件,以格式化的形式将数据块输出到文件

const void * ptr:要输出的数据块的地址

size_t size:数据块的大小

size_t count:数据块的个数

因为以二进制进行数据输出,所以在记事本上有些字符看不懂属于正常现象。

4.5.sscanf和sprintf

sprintf:将一个格式化数据转换成字符串

char * str:存放字符串的空间(地址)
const char * format:格式化数据

sscanf:将字符串转化成格式化数据

5.文件的随机读写
5.1fseek函数:

跟据文件光标的位置与偏移量定位光标

int fseek(FILE*stream,long int offest,int origin);

文件中每读取一个字符文件的光标都会向后走一格,可以根据光标所在位置及与初始位置偏移量来定位光标。下面红色下划线的是光标

5.2 ftell函数:
long int ftell(FILE*stream);

返回文件指针相对起始位置的偏移量;

5.3 rewind函数

使文件光标回到起始位置

void rewind(FILE*stream);

6.文件结束的判定

feof函数:判断判断文件是否因为遇到文件为而结束,

文本文件:

使用fgetc正常结束返回EOF

使用fgets正常结束返回NULL

二进制文件:

读取是否正常结束,判断其返回值是否小于实际要读的个数

例如使用fread判断返回值是否小于实际要读的个数。

文本文件判断流程:

二进制文件判断流程:

C语言文件操作函数大全 2.文件操作函数: (1)文件打开函数fopen fopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen("文件名","使用文件方式"); 其中,“文件指针名”必须是被说明为FILE 类型的指针变量,“文件名”是被打开文件文件名。 “使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。例如: FILE *fp; fp=fopen("file b","r"); 其意义是在当前目录下打开文件file b, 只允许进行“读”操作,并使fp指向该文件。 又如: FILE *fp fp=("c:\\file_a',"rb") 其意义是打开C驱动器磁盘的根目录下的文件file_a, 这是一个二进制文件,只允许按二进制方式进行读操作。两个反斜线“\\ ”中的第一个表示转义字符,第二个表示根目录。"\\"对于打开磁盘下的文件,要注意两个双斜线的正确应用,在表示绝对路径时,每一级目录都要用"\\", 例如:fp=fopen("d:\\study\\file_b","r+"); ####使用文件的方式共有12种,下面给出了它们的符号和意义。 文件使用方式 意 义 “rt” 只读打开一个文本文件,只允许读数据 “wt” 只写打开或建立一个文本文件,只允许写数据 “at” 追加打开一个文本文件,并在文件末尾写数据 “rb” 只读打开一个二进制文件,只允许读数据 “wb” 只写打开或建立一个二进制文件,只允许写数据 “ab” 追加打开一个二进制文件,并在文件末尾写数据 “rt+” 读写打开一个文本文件,允许读和写 “wt+” 读写打开或建立一个文本文件,允许读写 “at+” 读写打开一个文本文件,允许读,或在文件末追加数据 “rb+” 读写打开一个二进制文件,允许读和写 “wb+” 读写打开或建立一个二进制文件,允许读和写 “ab+” 读写打开一个二进制文件,允许读,或在文件末追加数据 对于文件使用方式有以下几点说明:
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值