C语言---文件中的字符(1)

本文详细介绍了C语言中如何进行文件操作,包括何时使用文件、文件的基本操作如程序文件和数据文件的区别、文件名的概念。重点讲解了顺序读写文件,涉及fopen、fclose、fgetc、fputc等函数的使用,以及如何实现随机读写文件的fseek、ftell和rewind函数。
摘要由CSDN通过智能技术生成


按照一分钟300字阅读速度,本文阅读需要15min 左右

什么时候使用文件?

在使用计算机的时候,我们是离不开各种各样的文件的
比如 word 文件,txt文件,如果不是出现了什么特殊情况,比如电脑重装啥的,自己不去删除文件,文件就会一直在那不会丢。

所以,当我们要使用程序来长时间保存数据,不至于说程序关闭后,必要的数据就消失了,
这种感觉就和辛辛苦苦写了 ppt但是最后没保存一样难受了,这个时候就需要使用文件
我们无论是读文件还是写文件,都可以叫做文件的基本操作(名字我自己取的)

文件的基本操作

程序如何实现读写文件

首先,我们得知道,文件是什么?放在什么地方?程序是如何操作文件的?
文件可以分为程序文件数据文件

他们都是放在磁盘里的,也就是说磁盘的文件就是我们通俗所说的文件
不是放在内存中的,也不是放在其他奇怪的地方

程序文件

程序文件就是用来构建程序的文件,像我们写的源文件 main.c , windows 的 .exe文件,这些打开 visual 的 project 就能看到 ,叫做程序文件

数据文件

储存数据的文件,相对于构建程序的文件,这种构建于程序外部的文件且通常用来保存程序读写的数据,所以称为数据文件,我们讨论的都是数据文件

文件名

无论是数据文件还是程序文件,都有文件名
但是文件名不是 一个自定义名+文件类型
而是要加上他的路径
比如你的C盘的闲来无事文件夹有一个boring.txt文件
他的文件名应该是
c:\闲来无事\boring.txt
txt ,也就是后缀名,不是必须存在的,但是如果有,就决定了他的默认打开方式

顺序读写

程序如何操作文件?

程序如何操作文件,我们可以知道,程序能够直接操作内存
我们有一种方式操作文件,就是把所用的文件复制到内存中,然后操作完后再写回到文件里面

但是是这样的吗?
似乎不是

程序不会导入文件所有信息,而是让系统在内存开辟一个文件信息区来储存对应的文件信息(这些信息是有选择的,看看下面的代码),这些信息的类型使用结构体变量FILE来保存,通过这个 FILE 变量来操作文件

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

有了这个结构体,我们打开和关闭文件的操作就能够实现
实现的函数分别是 fopen 和 fclose

如果我们要以只读的形式打开一个 项目文件下的 txt 文件,可以这么写

int main()
{
   
	FILE* pF = fopen("text.txt","r");
	//对读取出来
	fclose(pF);
	pF = NULL;
	return 0;
}

每次打开文件,都会有一个 FILE 类型的变量诞生,就需要用一个指针储存起来
每次关闭,就用空间释放,指针相对就应该为空指针

但是我们打开的文件是不能乱来的
比如你要写文件,你就不能用读文件的模式打开,你要别人对这个文件只能读,不能写,你的程序就不能越过这个权限,所以 fopen 就规定了打开的方式
来自cplusplus 网站

读写的函数

当我们打开文件后,重要的不是文件本身,是要能够对文件进行操作,而文件唯二的操作就是读和写

关于文件读写的函数有分类有 单个字符的读写,一行字符的读写,带格式的读写,二进制的读写

我们可以先看看所有的读写函数(如果觉得有些复杂,可以先跳过这里,直接看顺序读写)
然后我们再分类认识

函数名 返回值 参数
fgetc int(读取失败是 EOF,成功返回读取的字符的asc码) (FILE* stream)
fputc int(写入失败是 EOF,成功返回读取的字符的asc码) ( int character, FILE * stream )
fgets char *(成功返回 字符串, 失败返回NULL) ( char * str, int num, FILE * stream )
fputs 成功返回非负数,失败返回 EOF) ( con
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值