文件操作详解(一)


在这里插入图片描述

一.文件的类型

存储在硬盘上的是文件,文件分为数据文件和程序文件两种类型(根据功能不同分类的)

1.数据文件

数据文件是程序运行时读写的数据
例如:程序运行时需要从中读取数据的文件,
程序运行时需要从中写进数据的文件
数据文件被分为二进制文件文本文件(根据数据类型不同分的)

2.程序文件

以windows为例,源文件是(.c) 目标文件是(.obj)
可执行程序是(.exe)

3.文件名

文件标识 == 文件名
文件名包含三个部分:文件路径+文件主干+文件后缀
例如:c:\code\test.txt

二. 二进制文件

数据在内存中以二进制的形式存储,不加转化地输出到外存,就是二进制文件
10000以二进制的形式存储占4个字节

三.文本文件

如果要求在外存上以ASCII码的形式存储,就需要在存储前转化。在外存中以ASCII码的形式存储的就是文本文件
10000以字符的形式存储占5个字节,因为10000有五位嘛

int main()
{
	int a = 10000;
	FILE* pf = fopen("test.txt", "wb");//打开文件
	if (pf == NULL)//文件是空指针提前返回
	{
		perror("fopen");
		return 1;
	}
	//写入
	fwrite(&a,4,1,pf);//在vs上以二进制的形式写入文件中
	fclose(pf);//关闭文件
	pf = NULL;

	return 0;
}

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
10000的16进制是:00 00 27 10
因为vs上是小端存储:低位的内容存在低地址上
10 27 00 00

四. 文件的打开(fopen)和关闭(fclose)

我们使用文件应该先打开文件,使用完后应该关闭文件
我们使用文件指针来建立文件和指针之间的关系

FILE* pf = fopen(const char*filename,const char* mode);
//filename表示要打开的文件,mode表示文件的打开方式
fclose(FILE* stream);
//stream表示要关闭指针指向的文件
//mode表示打开的模式,(例如以读的形式打开)

在这里插入图片描述

int main()
{
	FILE* pf = fopen("test.txt", "r");//打开文件
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//使用
	//...
	fclose(pf);//关闭文件
	pf = NULL;

	return 0;
}

1.1流是什么

流是抽象出来的一种概念,为了方便程序员读写文件
键盘、文件、硬盘向流中输入数据,我们就可以从流中获取数据
我们一般都是打开流,获取数据或输入数据,然后操作

1.2标准流

我们向键盘上输入数据,然后打印出了内容,为什么并没有打开流?
是因为C语言默认打开三个流:
stdin:标准输入流,大多数情况下用键盘输入,scanf都是从标准输入流中读取数据
stdout:标准输出流,大多数情况下都是输出到显示器界面的,printf输出到标准输出流中
stderr:大多数情况下都是把错误输出到显示器界面的

stdin、stdout、stderr其实是FILE*类型的,他们都是文件指针

int fprintf(FILE* stream,const char* p);
int printf(const char* p);
//printf和fprintf很相似
//向流中输入数据

在这里插入图片描述

int fscanf(FILE*stream,const char* p);
int scanf(const char* p);
//fcanf和fscanf也很相似
//fscanf是向流中读取数据

在这里插入图片描述

2.文件指针

文件指针本质上是一个结构体指针
每个被使用的文件都在内存中开辟一个文件信息区,这些文件信息保存在一个结构体变量中,该结构体变量是由系统声明的
下面以VS2013环境下头文件中的文件类型声明:

struct_iobuf
{
       char*_ptr;
       int _cnt;
       char* _base;
       int _flag;
       int _charbuf;
       int __bufsiz;
       char* _tmpfname;     
};
typedef struct _iobuf FILE;

我们以FILE*的指针来维护这个结构体

FILE* pf

我们用pf这个文件指针来指向某个文件的文件信息区(结构体变量),能通过文件信息区的信息可以访问这个文件,所以可以通过文件指针变量间接地访问与它有关联的文件

在这里插入图片描述

未完待续,敬请期待
创作不易,希望大家多多点赞

  • 33
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值