C语言文件操作详解

C语言文件操作详解

文件在我们计算机中是一个很常见的名词,那么到底什么是文件呢,文件的类型又包涵哪些呢?下面就由我来一一为大家介绍。
文件一般包括:程序文件和数据文件。
程序文件:包括源程序文件(xxx.c),目标文件 (在windows环境下的.obj),可执行程序(windows下的…exe)。
数据文件:一般是指数据库的文件
其中数据文件根据数据的组织形式,数据文件又被称为文本文件或者二进制文件
文本文件是指以ASCII字符的形式存储的文件就是文本文件。
而二进制文件则指数据在内存中以二进制的形式存储。
文件缓冲区
文件缓冲区是用以暂时存放读写期间的文件数据而在内存区预留的一定空间。通过磁盘缓存来实现,磁盘缓存本身并不是一种实际存在的存储介质,它依托于固定磁盘,提供对主存储器存储空间的扩充,即利用主存中的存储空间, 来暂存从磁盘中读出(或写入)的信息。 主存也可以看做是辅存的高速缓存, 因为,辅存中的数据必须复制到主存方能使用;反之,数据也必须先存在主存中,才能输出到辅存。
在这里插入图片描述
文件指针``
在C语言中用一个指针变量指向一个文件,这个指针称为文件指针
每打开一个文件,系统就会自动创建一个文件指针的结构体类型,并返回其地址(FILE *fopen( const char *filename, const char *mode ));

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

文件的打开与关闭
在我们对文件的操作前,我们必须先打开文件,在使用结束后我们必须要关闭文件。
标准C规定,我们用fopen()函数来打开文件,fclose来关闭文件,其中打开方式有以下几种方式:
在这里插入图片描述
在文件的顺序读写中,我们有许多功能的函数:列如fgetc,fputc,fgets,fputs,fscanf,fprintf,fread,fwrite.

int main()
{
	FILE* pr = fopen("data.txt", "w");
		if (pr == NULL)
		{
			return 1;
		}
		fputc('a', pr);
		fclose(pr);
		pr = NULL;
		return 0;
}

在这里插入图片描述

int main()
{
		FILE* pr = fopen("data.txt", "r");
			if (pr == NULL)
			{
				return 1;
			}
			printf("%c",fgetc(pr));
			fclose(pr);
			pr = NULL;
			return 0;
}

在这里插入图片描述

int main()
{
		FILE* pr = fopen("data.txt", "w");
			if (pr == NULL)
			{
				return 1;
			}
			fputs("abcdef", pr);
			fclose(pr);
			pr = NULL;
			return 0;
}

在这里插入图片描述
剩下的函数就不一一测试了,感兴趣的可以去测试。
接下来我们来认识一下文件的随机读写。
fseek
int fseek( FILE *stream, long offset, int origin );

int main()
{
		FILE* pr = fopen("data.txt", "w");
			if (pr == NULL)
			{
				return 1;
			}
			fputs("Hello World!", pr);
			fseek(pr, 9, SEEK_SET);
			fclose(pr);
			pr = NULL;
			return 0;
}

ftell
long int ftell ( FILE * stream )

int main()
{
	FILE* pr = fopen("data.txt", "r");
	if (pr == NULL)
	{
		return 1;
	}
	fgetc(pr);
	fgetc(pr);
	printf("%d\n", ftell(pr));
	fgetc(pr);
	printf("%d\n", ftell(pr));
	fclose(pr);
	pr = NULL;
	return 0;
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021032017380156.png)
**fewind**
void rewind( FILE *stream );

```c
int main()
{
	FILE* pr = fopen("data.txt", "r");
	if (pr == NULL)
	{
		return 1;
	}
	fgetc(pr);
	fgetc(pr);
	printf("%d\n", ftell(pr));
	fgetc(pr);
	printf("%d\n", ftell(pr));
	fgetc(pr);
	rewind(pr);
	printf("%d\n", ftell(pr));
	fclose(pr);
	pr = NULL;
	return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值