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

文本文件判断流程:

二进制文件判断流程:

  • 38
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,下面详细介绍一下 C 语言中常用的文件操作函数: 1. fopen():打开文件,返回文件指针。 ``` FILE *fp; fp = fopen("filename", "mode"); ``` 其中,filename 是要打开的文件名,mode 是文件打开的模式。常用的 mode 选项有: - "r":只读模式,打开已存在的文件。 - "w":写入模式,打开已存在的文件并截断为零长度,或创建一个新文件。 - "a":追加模式,打开已存在的文件并将文件指针指向文件末尾,或创建一个新文件。 - "rb"、"wb"、"ab":二进制模式,与上述模式相同,但是以二进制格式读写文件。 如果文件打开成功,返回一个非空的文件指针;否则返回 NULL。 2. fclose():关闭文件。 ``` fclose(fp); ``` 关闭文件后,释放文件所占用的资源。如果文件操作失败,返回 EOF。 3. fgetc():从文件中读取一个字符。 ``` char c; c = fgetc(fp); ``` 从文件中读取一个字符,并将文件指针移动到下一个字符。如果读到文件结尾或者文件读取失败,返回 EOF。 4. fgets():从文件中读取一行字符串。 ``` char str[100]; fgets(str, 100, fp); ``` 从文件中读取一行字符串,并将文件指针移动到下一行。如果读到文件结尾或者文件读取失败,返回 NULL。 5. fprintf():向文件中写入格式化的字符串。 ``` int num = 10; fprintf(fp, "The number is %d\n", num); ``` 将格式化的字符串写入到文件中。 6. fputs():向文件中写入字符串。 ``` char str[] = "Hello, world!"; fputs(str, fp); ``` 将字符串写入到文件中。 7. fwrite():从内存中写入二进制数据到文件。 ``` int nums[] = {1, 2, 3, 4, 5}; fwrite(nums, sizeof(int), 5, fp); ``` 将 nums 数组中的 5 个整数以二进制形式写入到文件中。 8. fread():从文件中读取二进制数据到内存。 ``` int nums[5]; fread(nums, sizeof(int), 5, fp); ``` 从文件中读取 5 个整数,以二进制形式存储到 nums 数组中。 9. fseek():设置文件指针的位置。 ``` fseek(fp, offset, from); ``` 将文件指针设置为从 from(SEEK_SET、SEEK_CUR、SEEK_END 之一)偏移 offset 个字节的位置。 10. ftell():获取文件指针的位置。 ``` long pos = ftell(fp); ``` 返回文件指针在文件中的当前位置。 11. rewind():将文件指针移动到文件开头。 ``` rewind(fp); ``` 将文件指针移动到文件开头。 以上是 C 语言中常用的文件操作函数,需要注意的是,在使用文件后,必须使用 fclose() 函数关闭文件,以便释放资源。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值