文件操作

1、IO流

什么是IO流呢?
在这里插入图片描述

简单地说就是文件的输入和输出
I :Input;
O :Output;
通过IO可以完成硬盘文件的读和写。

什么是文件

磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件

程序文件

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

数据文件

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

文件名

一个文件要有一个唯一的文件标识,以便用户识别和引用。
文件名包含3部分:文件路径+文件名主干+文件后缀
例如: c:\code\test.txt
为了方便起见,文件标识常被称为文件名。

文件类型

根据数据的组织形式,数据文件被称为文本文件或者二进制文件。
数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件。
比特科技
如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。

文件的打开关闭
int main()
{
	//打开文件fopen()
	FILE* f = fopen("D:\\xixix.txt","w");
	if (f == NULL) {
		// printf("文件打开失败! errno = %d, %s\n", errno, strerror(errno));
		perror("文件打开失败!");
		system("pause");
		return 1;
	}
	printf("文件打开成功!\n");
	fclose(f);
	system("pause");
	return 0;
}

此处的 FILE 是一个结构体. (C 标准库中已经定义好了的)返回结果叫做 “文件指针”, 有的时候也可以叫做 “句柄”(handler) 文件打开可能会失败. 返回 NULL

文件的打开方式
在这里插入图片描述

文件的随机读写

fseek:根据文件指针的位置和偏移量来定位文件指针。

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

int main()
{
	//打开文件fopen()
	FILE* f = fopen("D:\\xixix.txt","w");
	if (f == NULL) {
		// printf("文件打开失败! errno = %d, %s\n", errno, strerror(errno));
		perror("文件打开失败!");
		system("pause");
		return 1;
	}
	printf("文件打开成功!\n");
	char buf[1024] = { 0 };
	int n = fread(buf, 1, 1024, f);
	printf("%s\n", buf);
	fclose(f);
	system("pause");
	return 0;
}

其中第二个参数和第三个参数相乘, 就得到了要读取的整体的字节数.
返回值表示实际读取到的元素个数.
如果实际读到的元素个数小于预期的要读的元素个数, 就可以认为
文件读完

fwrite 负责把内存的数据, 写到磁盘中

char buf[1024] = "hahaha";
	int n = fwrite(buf, 1, strlen(buf), f);
	if (n < strlen(buf)) {
	perror("fwrite");
	}
	fclose(f);
	system("pause");
	return 0;

如果 fwrite 写成功了, 那么就会返回实际写入的元素个数.
如果失败了就会返回 < 0 的结果.

文件缓冲区

ANSIC 标准采用“缓冲文件系统”处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在
使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘
上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐
个地将数据送到程序数据区(程序变量等)。缓冲区的大小根据C编译系统决定的。

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值