c语言文件与文件操作

1,为什么使用文件

首先要知道无论是我们写的程序运行还是要进入某些软件,都会伴随着大量程序在内存中运行,而当我们退出程序或者关机时内存就会清空,如果将数据存储在内存中显然是不行的,其实这些程序数据全都存储在硬盘中,以文件的形式展现给我们。

2,什么是文件

存储在硬盘中的文件就是文件,

从文件功能角度分为:程序文件,数据文件

2.1程序文件

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

2.2数据文件

其内容可以是程序,也可以是程序运行中读取的数据或输出的数据

2.3文件名

⼀个⽂件要有⼀个唯⼀的⽂件标识,以便⽤⼾识别和引⽤。
⽂件名包含3部分:⽂件路径+⽂件名主⼲+⽂件后缀
例如: c:\code\test.txt
为了⽅便起⻅,⽂件标识常被称为⽂件名。

3.二进制文件和文本文件

根据数据的组织形式 数据文件可以分为二进制文件和文本文件。
数据在内存中以二进制存储,如果不加以转换输出到外存( 硬盘)中,叫 二进制文件
如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的⽂件就是文本文件
⼀个数据在⽂件中是怎么存储的呢?
字符⼀律以ASCII形式存储,数值型数据既可以⽤ASCII形式存储,也可以使⽤⼆进制形式存储。
如有整数10000,如果以ASCII码的形式输出到磁盘,则磁盘中占⽤5个字节(每个字符⼀个字节),而二进制形式输出,则在磁盘上只占4个字节。

4.文件的打开和关闭

4.1流和标准流

4.11流

我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输⼊输出操作各不相同,为了⽅便程序员对各种设备进⾏⽅便的操作,我们抽象出了流的概念,我们可以把流想象成流淌着字符的河。
C程序针对⽂件、画⾯、键盘等的数据输⼊输出操作都是通过流操作的。
⼀般情况下,我们要想向流⾥写数据,或者从流中读取数据,都是要打开流,然后操作。

4.12标准流

我们从键盘上输入数据或向屏幕上输出数据也打开了流,通过打开输入流用键盘像程序中输入数据,打开输出流像屏幕输出程序结果。这两种流就是标准流

stdin - 标准输⼊流,在⼤多数的环境中从键盘输⼊,scanf函数就是从标准输⼊流中读取数据。
stdout - 标准输出流,⼤多数的环境中输出⾄显⽰器界⾯,printf函数就是将信息输出到标准输出
流中。
stderr - 标准错误流,⼤多数环境中输出到显⽰器界⾯。
我们使用scanf ,printf 时就默认打开了这三个流

4.2文件指针

每一个文件的使用都会在内存中开辟一个文件信息区,用来存放文件的各种信息(文件名,文件状态等),这些信息存储在一个结构体中,该结构体由系统命名为FILE

而想要取得结构中的信息就必须要有一个指针指向这个结构,该指针叫文件指针。

4.3文件的打开和关闭

用两个函数来实现文件的打开和关闭。fopen和close

fopen:打开一个文件并返回该文件的文件指针,参数:文件名和打开方式(读,写)

close:关闭文件,通过文件指针

打开方式:

5.文件的顺序读写

5.1顺序读写函数

5.2对比一组函数

//scanf   /fscanf/sscanf
//printf / fprintf/sprintf
#include<stdio.h>
struct S
{
	int a;
	float s;
	char c[10];
};
int main()
{
	int n = 0;
	FILE* pf = fopen("data.txt", "r");
	FILE* pt = fopen("next.txt", "w");
	struct S s = { 100,3.14f,"haha" };
	char arr[30];

	//scanf格式化标准输入流
	scanf("%d", &n);
	//printf格式化标准输出流
	printf("%d", n);
	
	//fscanf格式化所有输入流
	fscanf(pf, "%d", &n);
	//fprintf格式化所有输出流
	fprintf(pt, "%d", n);

	//sscanf从字符串中读取数据格式化存储
	sscanf(arr, "%d %f %s", &(s.a), &(s.s), &(s.c));
	//sprintf将格式化的数据输出到一个字符串中
	sprintf(arr, "%d %f %s", s.a, s.s, s.c);

	return 0;
}

6.文件的随机读写

1.fseek

2.ftell

计算相对起始位置的偏移量

3.rewind

让⽂件指针的位置回到⽂件的起始位置

7.文件缓冲区

ANSIC 标准采⽤“缓冲⽂件系统” 处理的数据⽂件的,所谓缓冲⽂件系统是指系统⾃动地在内存中为 程序中每⼀个正在使⽤的⽂件开辟⼀块“⽂件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才⼀起送到磁盘上。如果从磁盘向计算机读⼊数据,则从磁盘⽂件中读取数据输 ⼊到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓 冲区的⼤⼩根据C编译系统决定的。
  • 19
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值