【C语言基础】->文件操作详解->一篇文章读懂关于文件的庞杂函数使用

Ⅰ 文件和文件控制块

A.文件的定义

文件是计算机表达信息的最小逻辑单位,是信息二进制化在外存中的集合。

B.文件控制块(FCB)

为了能对一个文件进行正确的存取,必须为文件设置用于描述和控制文件的数据结构,称之为“文件控制块(FCB)。

操作系统的FCB,在不同系统的程序设计语言中,对应的名字不同,但是本质的数据类型是一样的,在C语言中,对应的便是FILE类型。

关于FCB有以下几点需要注意:

  • FCB是操作系统珍贵的有限资源。
  • 操作系统对文件的操作必须通过FCB进行。

因此,FILE是操作系统有限的资源,在对文件进行操作前,必须先申请这个资源。

Ⅱ 文件操作

C语言对文件的操作要通过FILE类型,通常的操作顺序:

  1. 打开文件 (其本质为申请FCB)
  2. 读、写文件
  3. 关闭文件 (其本质为归还FCB)
	FILE *fp; //fp为指针类型,不是FILE实例

	fp = fopen(文件名, 打开方式);
	FILE *fopen(const char *fileName, const char *mode);
	fclose(FILE *)

fileName为文件名。
mode包含两部分内容:
1.操作方式

r read only(只读,默认方式)
w write(创建/改写)
a append(追加写)
r+ 既读又写

2.识别方式

t text / ASCII(文本文件,字节流文件,非格式化文件)
b binary(二进制文件,格式化文件)

两个注意事项:
1.以r方式打开某文件,若该文件不存在,则fopen()返回NULL,表示申请 FCB失败;
2.以w方式打开某文件,若该文件不存在,则创立该文件,且为空文件。若该文件存在,则会清空原来文件的所有内容。

Ⅲ 文件操作函数

A. fopen() & fclose()

fopen()原型为 FILE * fopen(const char * path,const char * mode);其本质是申请FCB资源;
fclose()原型为 int fclose(FILE *stream);其本质是归还FCB资源。

B. fprintf() & fscanf()

关于fprintf() 和 fscanf()两个函数,有两个需要注意的地方:这两个函数,无论文件是以 t方式 打开,还是以 b方式 打开,其内容都是文本,即ASCII码。,所以写进去的数据,本质都是字符串,读数据会将字符串转为需要的数据类型,然后读出。

进行一次读写操作后,位置指针向后移,且fscanf()遇到空格和换行时结束,注意空格时也结束。

a. fprintf()

原型:int fprintf (FILEstream,const charformat, [argument])
功能:向文件指针所指向的文件中写入相应类型的数据。
返回值:若成功,返回输出字符数;若失败,则返回负值。

printf("%d %d", 5, 684) == fprintf(文件指针, “%d %d”, 5, 684);

测试代码如下👇

#include <stdio.h>

int main() {
   
	int a = 3;
	int b = 5;
	FILE *fp;

	fp = fopen("test1.txt", "w");
	fprintf(fp, "%d %d\n", a, b);

	fclose(fp);

	return 0;
}

程序运行结束,文件夹里便多了一个文件。
在这里插入图片描述
内容为
在这里插入图片描述
可以看到,a和b的值通过fprintf()写入了文件中。

b. fscanf()

原型:int fscanf(FILEstream,charformat,[argument…]);
功能:从文件指针所指的文件中读取数据并赋值给变量
返回值:返回成功读取的数据个数,若文件中没有数据可以读,则返回-1。

测试代码如下👇

#include <stdio.h>

int main() {
   
	int a;
	int b;
	FILE *fp;

	fp = fopen("test1.txt", "r");
	fscanf(fp, "%d %d", &a, &b);

	printf("%d %d\n", a, b);

	fclose(fp);

	return 0;
}

结果为👇
在这里插入图片描述
可以看到成功的从我用fprintf()写入的文件中读取了3 和 5并赋值给 a 和 b。

关于fscanf()的返回值我也做了测试,代码如下👇

#include <stdio.h>

int main() {
   
	int a;
	int b;
	int c;
	FILE *fp;

	fp = fopen("test1.txt", "r");
	c = fscanf(fp, "%d %d", &a, &b);

	printf("%d %d\n", a, b);
	printf("%d\n", c);

	fclose(fp);

	return 0;
}

我以此将文件中的数据改为 3 5, 3, 无数据这三组&

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值