从今天的这篇博客开始,我就不再讲仅仅存在于编译器上的东西了,接下来,我要讲的是怎么样把暂时在编译器上的代码永久化的保存。今天,讲的就是其中之一的文件操作。好了。我们废话不多说,开始我们今天的博客。
1.为什么使用文件
想一想,平时我们在写代码的时候,代码通过编译器是储存在内存中的,但是一旦我们退出这个程序,内存就会被回收,里面的是数据就会消失,那么为了让数据持久化的保存,我们就需要文件操作了。这就是为什么要使用文件。
2.什么是文件
在磁盘上的文件被我们称为文件。在程序设计中,文件可以被分为两种,一种是程序文件,一种是数据文件。在这里,我主要想讲的是数据文件。数据文件就是文件的内容是程序运行时要读取或者输出内容的文件。讲完了什么是文件,接下来,我就来讲一下文件名这个概念。
一个文件要有唯一一个文件表示,以便于用户可以快速地找到和应用。文件名包括三部分。分别是文件路径+文件名主干+文件后缀。
例如:c:\code\test.txt就是一个文件名,大家可以看看自己电脑里面的文件名,区分一下什么是文件路径,什么是文件名主干,什么是文件后缀。
3.二进制文件和文本文件
根据数据的组织形式,文件可以分成文本文件和二进制文件。
如果文件是以二进制的形式储存的,在打开之前不加以转换的话,出现的全是以二进制储存的的数据,这就被称为二进制数据。但是如果数据再存入文件之前转化成了ascll码的形式的话,那么该文件就被称为文本文件。分不清这两个文件的朋友只需要记住,二进制文件我们无法读懂,但是文本文件我们读得懂。
4.文件的打开和关闭
接下来,我就来给大家演示一下,在编译器上打开和关闭文件的方法,,大家请看下面的代码图片。
上面的代码展示的就是文件的打开和关闭,大家看到这张图片的时候可能会有很多疑惑,但是没关系,接下来,我会一一讲解里面的知识点。在这之前,我想给大家介绍一个新的概念,那就是流的概念。那么什么是流呢?
4.1 流的概念和标准流的概念
上面的图片中,提到了输入流和输出流,其实在编译器上我们使用的printf和scanf就是这两个流的代表函数,但是,在文件操作的这个概念中,它们被称为标准输出流和标准输入流,那么什么是标准流呢?
4.2 文件指针
讲完了流的概念,还没完,大家再看我上面写的代码中,出现了一个指针,那就是文件指针。接下来,我就来给大家展示一下文件指针的基本写法。
FILE*pf//文件指针变量在打开文件的时候,都需要一个指针那就是文件指针去接受这个文件,通过对指针的操作间接对文件进行操作,这样就可以让文件操作更加的方便。好了,这就是文件指针。
4.3 文件的打开和关闭
在C语言的规定中,文件的打开和关闭是紧密联系在一起的,打开了文件,就要关闭文件。在ANSI C规定使用中,fopen用来打开文件,fclose用来关闭文件。接下来,我就来好好和大家讲一下这两个重要的函数。
4.3.1 fopen
//打开文件 FILE* fopen(const char * filename,const char * mode);功能:fopen 函数是用来打开参数filename相对应的文件的,同时将打开的文件和一个流进行关联。后续对流的操作是通过fopen函数返回的指针进行维护的。具体对流的操作是通过参数mode来决定的。
参数
filename:表示被打开文件的名字。可以是绝对路径,也可以是相对路径。
mode:表示对文件的操作。
返回值:
要是文件打开成功就会返回一个FILE*的指针,要是打开失败就会返回一个NULL,指针,这个函数就像之前的内存管理函数一样,有失败的可能,所以在使用这个文件之前,一定要检验一下是否打开成功。
接下来,我就来给大家展示一下这个函数的使用的情况。大家请看下下面的代码图片。
上面的图片展示了文件打开成功和打开失败的情况,大家也可以在自己的编译器上尝试一下。接下来,我就来给大家总结一下mode的操作有哪些,以及它们的作用。
4.3.2 fclose
//关闭文件 int fclose(FILE*stream);功能:关闭参数stream的关联文件,并取消与其的关联关系。与该流关联的所有缓冲区均会解除关系并刷新。任何未被写入输出缓冲区的内容将被写入,为被读取输入缓冲区的内容将被丢弃。
参数
stream:只想要要关闭流的FILE对象的指针
返回值:成功关闭就会返回0,失败就会返回EOF。
接下来,我就来给大家展示一下,这个函数的使用。大家请看下面的图片。
上面展示的文件关闭的方法,想必大家也已经看到了,文件关闭操作和内存释放是一样的,都需要手动置空的操作,希望大家可以记住这一点,如果不手动置空的话就会成为野指针,野指针很危险的。感兴趣的朋友可以自己在编译器上尝试尝试。这就是我全部要讲的关于文件打开和关闭的内容了。
5.文件的顺序阅读
接下来,我将会给大家介绍一些关于文件操作的函数。
上面的这些函数都是文件的读写需要的函数,接下来,我使用这些函数来写一段代码,来给大家看看这些函数在代码中的使用。大家请看下面的代码图片。
接下来,我还要讲两个函数,分别是feof和ferror
6.文件的随机阅读
既然文件存在顺序读写,那么一定存在随机读写,写下来,我就来给大家讲一件文件的随机读写。
好了,今天的博客就到这里了。这篇博客还有很多地方没有提到,但是写到的都是一些重要的知识点,希望大家可以耐心的读完,希望我的博客对你的C语言学习有帮助,我们下一篇博客再见!!!