当前位置:   article > 正文

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

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用来关闭

  1. FILE*fopen(const char*filename,const char mode);
  2. //filename为要打开的文件名,mode为打开的方式
  3. int fcolse(FILE*stream);
  4. //关闭文件

文件的打开方式有:

举例一种使用方式:

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判断返回值是否小于实际要读的个数。

文本文件判断流程:

二进制文件判断流程:

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/789630
推荐阅读
相关标签
  

闽ICP备14008679号