- 文件是数据源的一种,他最主要的作用就是保存数据。作为计算机不可或缺的一部分,文件可以储存很多不同种类的信息。
- 文件(file)通常是在磁盘或固态硬盘上的一段已命名的存储区。例如在c语言中常出现的stdio.h就是一个文件的名称,该文件中包含的就是头文件内的相关信息。
- 在C语言中,程序提供了两种文件模式:文本模式和二进制模式。
- 二进制模式:在二进制文件格式中,文件内的所有内容都以二进制形式(0或1)存储。所以它存储的类型是多样的。对于不同类型的二进制文件,如果想要准确的得到它所存储的信息,那就必须需要特别的解码器。
- 文本模式:文本文件只能存储char型字符变量。它通过文本编辑器就能对其中的数据进行修改。文本文件实质上也是一种特殊的二进制文件,因为它在磁盘上的存储方式也是二进制形式。
- 当你用记事本打开文本文件时,一切都是正常的。但如果你用它打开二级制文件,可能会出现一堆乱码。那是因为文本文件只能够识别字符类型,而无法识别其他类型。
- 那么这两种类型的文件有什么优缺点呢?文本文件存储的都是字符类型,所以每个字符所占的位置都是相同的,因而在对这段字符进行译码 *** 作时,就会相对来说比较方便。而二进制文件的存储利用率更加高。例如一个高位数字,你用文本文件来存放,就会需要相应长度的空间。而二进制文件只需要一个int或long类型的空间就行了,所占的内存就会相对来说更小点。
- 文件的组成一般有三个部分,文件路径,文件名和后缀。后缀类型就是我们常见的各类文件最后的字母( txt exe jpg … )
- 先来看看文件 *** 作的简易流程:
- 每个文件在进行读写 *** 作的时候,都少不了类似的步骤。
- 如果我们要对文件进行 *** 作,那我们必须建立起和文件之间的连接。先向大家介绍文件的打开函数。那么在C语言中,存储在
中的fopen( )函数就可以打开文件。 - 那么我们来具体看fopen这个函数:FILE * fopen(char * filenname,char * mode);
- filename是这个文件的名称(包括文件路径),而mode则问打开方式。
- 然后我们返回一个FILE类型的指针。FILE类型是一个结构体,它是用来保存文件信息的。
- 那么我们正常写的格式就是FILE * fp = fopen(" C:g.txt " , " rb+ "); 这句话的意思就是我们先定义了一个FILE类型叫做fp的指针,我们用它指向了一个放在C盘下3g.txt文件,该文件以二进制方式打开,并且我们可以对它进行读和写的 *** 作。
- filename= C:g.txt
- mode=rb+
- 再让我们看看fopen()函数的打开方式
- 文件一旦使用完毕,我们就应该对文件进行关闭,以释放掉相关资源。这可以保证空间不会被乱利用,而导致文件发生丢失。
- int fclose ( FILE * fp);
- 当文件正常关闭时,它的值为0.如果不是0,就代表在返回时发生了错误。
了解完这两部分,让我们来简单动手 *** 作下文件的相关 *** 作,以此加深我们的印象。
方式如下:
- 我们现在C盘下创建一个txt文件,在里面输入以下信息。
- 然后我们在VS中写下我们的代码
#include#include int main(void) { FILE* fp=fopen("C:\班级成员.txt","rt"); if (fp == NULL) { puts("文件打开失败"); } char str[25]; while (fgets(str,24,fp)!=NULL) { printf("%s", str); } fclose(fp); return 0; }
- 初次我们得到的答案是
- 很奇怪是吧,那是因为文件的本身编码的影响
- 当我们把班级成员这个文件改为ANSI编码格式,我们就能得到正确形式了。
- 在文件的读取中,我们还会用到更多的函数,单个字符的getc()和puts()。以及文件的I/O函数,再到随机访问的fseek()和ftell()。灵活运用这些函数,以及对文件进行读写 *** 作,我们将会实现很多事。灵活运用将链表写入文件,并从文件中读取链表是实现学生管理系统的关键,我会在接下来的博客中更新学生管理系统制作的整个流程。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)