文件操作1

一、文件类型指针

二、文件操作函数

1、fopen:打开文件
2、fclose:关闭文件
3、fwrite:写数据,把内存的数据往文件中写数据(类似于输出)
4、fread:读数据,从文件中读数据到内存(类似于输入)
5、fseek:随机读写函数

一、文件类型指针

例如fopen打开

因为如上图,这些操作函数的返回值就是返回指向该文件的指针,所以叫文件类型指针

文件类型指针——就是FILE*,且下面的所有的文件操作函数都要用到FILE*

文件类型指针——对于文件的作用,就相当于学号——对于一个学生的作用,身份证号——对于一个公民(在一个国家进行所有生活行动的唯一凭证)的作用

是一个学生在学校里面的唯一凭证,一个学号唯一确定一个学生,找学号就是找学生

第一次打开一个新文件,它返回一个文件类型指针给你,之后你再要对这个文件进行所有的文件操作时,都必须通过这个文件类型指针来进行操作(例如:FILE*fp,之后要进行文件操作只写fp就好了)就好了

二、文件操作函数

1、fopen:打开文件

打开文件函数需要2个参数,一个是文件名,一个模式名

我们可以看到在文件操作函数里面并没有创建新文件函数fcreate什么之类的,

因为fopen兼职做了这项工作,fopen就有创建新文件的功能

易错注意点:

注意文件路径

因为如果是直接将我们在电脑打开的D盘,上面显示的路径,这里路径只有一个\

而我们创建新文件是写2个\

因为在C语言里面,一个\是转义字符的意思

可以打开看看如果是一个\,它显示的是什么

显示的并不是我们的文件,所以一个\是错误的写法

而2个\输出显示的就是我们正确的文件名,在电脑里面打开该文件显示的也是这样的文件名

所以当文件路径中本身就有一个反斜线时,此时我们就要写2个反斜线,

一个\是转义字符的意思,2个\表示‘\’反斜线这个字符本身

输出显示的文件路径还是只有一个\,

而fopen创建(用w)一个新文件除了上面的文件名,还有第二个参数,模式名

我们打开D盘,可以看到1.txt创建成功了

而上面fopen的返回值,一定要接收,后面的文件操作用到的就是接收的名字(例如fw)代替这个文件

所以创建文件的固定写法如下图

2、fclose:关闭文件

当文件用完时,必须要关闭文件(有些没有关闭,但程序结束了代码为0也会自动关闭)

不关闭文件,后面再打开使用文件可能就会打不开出错

fclose的参数只有一个,就是文件类型指针,也就是只用告诉它文件名

还有一点是,如下图这2句代码,前面用w创建一个新文件名为1.txt的文件,

打开1.txt文件,在里面编辑写入内容后,保存,fclose关闭该文件

但当我们再次执行第一句fopen命令时,此时打开的文件1.txt里面是空的,之前编辑保存的内容都没有了

这是因为“w”打开一个已经存在的文件时,那么该文件里面原先的数据内容则会被销毁掉

所以“w”每次打开的文件的内容都是空的,即w总是创建一个新文件

所以用w就是创建一个新文件

如果要继续往文件里面写入内容且不删除原先的内容,用a

3、fwrite:写数据:把内存的数据往文件中写数据(类似于输出)

其有4个参数,以下图为例

第一个指向要写入数据的指针就是:str

第二个每一次输入的字节大小,这里一次输入一个字节即一个字符的大小:sizeof(char)

第三个是总共写多少次,一次写一个字符,那么字符串的总长度就是写入项的最大数量:

strlen(str),这里strlen不包含\0

第四个是往哪个文件里面写,这里是文件类型指针:fw

打开1.txt文件,可以看到刚才写入的内容

这个是总共写入次数即项的最大数量是加上'\0'的

打开文件就变成了这样

上面NUL就是'\0',它显示的并不是'\0',因为'\0'是字符串的结尾标记,但在文件里面并不需要'\0'(因为'\0'是一个不可打印,在文件里面没有显示,不可见的字符),

如果你非要把它打印显示出来,一般也会是一个很丑的小黑块,这个NUL是一个字符,删除它只用点一下删除键就NUL全删了

'\0'——只对字符串重要有用,其他如文件都不重要

4、fread:读数据,从文件中读数据到内存(类似于输入)

读写字符的函数除了write,还可以用这2个

每次fopen打开一个文件,都要判断一下文件是否打开失败,看文件打开失败都有哪些原因

写打开失败——文件路径写错了

读打开正常

读打开失败——文件不存在,或文件路径错误

路径错误读打开失败

//从键盘输入一些字符,并逐个把它们送到磁盘上去,直到用户输入一个“#”为止

打开文件结果(中文有可能出现乱码显示的结果)

上面fwrite函数可以用fputc函数代替,但fputc仅仅只能用来输出字符

4、fread:读数据,从文件中读数据到内存(类似于输入)

从文件中读取字符串(读到内存来)

(所以第一个参数就是数据的存储位置,即读出来的数据要存放到哪个位置

可以定义一个字符串的数组buf来存放),

剩下3个参数跟fwrite写很像

(读和写参数类似,只是数据流向的方向是相反的)

读:外——内;写:内——外

将下图文件里的内容以读r的方式打开,然后将其读到屏幕上

执行完所有操作最后都是固定的fclose关闭文件

可以看到这个buf打印出来有问题

这里一路烫是因为我们前面说过的,在文件中,字符串的结尾并没有‘\0’

而buf是一个字符串数组,所以一个简单的办法就是把它写成——char buf[100]="";

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值