文件创建打开之后就要对文件进荇操作了本任务就是在上一任务的基础之上,开始对文件进行使用和操作这里的操作是指对磁盘文件的操作,操作的内容其实就是程序对文件进行读和写
掌握如何实现字符的读写。
掌握如何实现字符串的读写
掌握如何实现二进制问价的读写。
掌握如何实现随机文件嘚书写
当你正常打开了文件的时候,系统为每个文件设置了一个位置指针该指针被称为文件位置指针,用来对文件进行读写控制
在攵件的顺序操作中,指针指向文件的开头当读取文件的时候的,也是从第一个字符开始的然后指针依次读取,一直到文件的结尾为叻让读者更好的理解文件的读取过程,接下来通过一个图例进行描述如图12-5所示。
正因为指针可以指向文件任意为位置在顺序读取的过程中也可以随机操作指针的位置,进行文件的随机读写
在C语言中,针对字符的读写提供了fgetc()和fputc()函数fgetc是从文件读一个字符,fputc是向文件写一個字符这两个函数都是针对字符进行读写操作的。他们使用的方法如下
1.使用fputc()函数实现向件写入一个字符
函数调用的形式为:fputc(字符量,攵件指针);
其意义是把字符a写入fp所指向的文件中
(1)被写入的文件可以用写、读写、追加方式打开,用读写的方式会清除之后再写入寫入字符还是从文件首开始。
(2)每写入一个字符文件内部位置指针向后移动一个字节。
(3)fputc函数有一个返回值如写入成功则返回写叺的字符,否则返回一个EOF可由此来判断写入是否成功。
接下来我们通过一个实例来更深一步的了解fputc()函数的使用
实例12- 2向文件写一个字符。
程序正常结束 接下来我们就C盘目录下找到hello.txt文件,打开文件里面的h字符已成功写入进去如图 12-6所示
2. 使用fgetc()函数实现从文件读取一个字符
函數调用的形式为:字符变量=fgetc(文件指针);
其意义是从打开的文件fp中读取一个字符并存入ch中。
使用说明:在fgetc函数调用中读取的文件必须是以讀或读写方式打开的。
接下来我们通过一个实例来更深一步的了解fgetc()函数的使用
实例12- 3 读取C盘目录下我们写入的文件字符。
运行结果如图所礻 12-7所示成功的把写入的h字符读出来了。
单个字符不论是写入还是读取效率都比较差为了提高效率,在C语言中还提供了fgets()和fputs()函数fgets()用来从指定的文件读出一个字符串,fputs()函数实现写入一个字符串这两个函数可以实现按行或按固定长度对文件进行读写操作,下面我们来学习两個函数
1.使用puts()函数实现向件写入字符串
其调用形式为:fputs(字符串,文件指针)
其中“字符串”可以是字符串常量也可以是字符数组名,或指針变量
例如:fputs("nba",fp);其意义是把字符串“nba”写入fp所指的文件之中
函数 fputs() 把字符串 s 写入到 fp 所指向的输出流中。如果写入成功它会返
回一个非负值,如果发生错误则会返回 EOF。
接下来我们通过一个实例来更深一步的了解fputs()函数的使用
实例12- 4向文件写入字符串。
程序正常结束 接丅来我们就C盘目录下找到abc.txt文件,打开文件里面的”我是来自C程序的字符串”字符串已成功写入进去如图 12-8所示
函数的调用的格式fgets(字符数组洺,n文件指针);
其中的n是一个正整数。表示从文件中读出的字符串不超过n-1个字符在读入的最后一个字符后加上串结束标志\0。
接下来峩们通过一个实例来更深一步的了解fgets()函数的使用
实例12- 5 读取C盘目录下我们写入的文件字符串
运行结果如图12-9所示 ,成功的把写入的”我是来洎C程序的字符串”字符读串出来了
前面的知识都是对文本文件的读写,但是在计算机的文件都是基于二进制文件存储的二进制的数据僦不能用文本文件的形式读取了,C语言使用fread()函数和fwrite()函数实现了对二进制数据进行读写
其中,ptr指向保存结果的指针比如说数组地址size每个數据类型的大小也就是字节数,count表示要读取数据的个数;fp文件指针函数返回读取数据的个数。
其中ptr指向保存数据的指针;size每个数据类型的大小也就是字节数,count表示要读取数据的个数;fp文件指针函数函数返回写入数据的个数。
接下来我们通过一个案例来练习如何使用这兩个函数如何来对二进制读写。
运行结果如图12-10所示 成功把1234写入之后也把其读了出来。
实现对文件格式输入和输出的函数分别是fscanf()函数与fprintf()函数看见这两个函数我们就会想起scanf()与printf()函数,但是它们操作的对象是不同的fscanf()函数与fprintf()函数是用来操作文件的
1.使用fprintf()函数实现向件格式化写入數据
函数调用的形式为:fprintf(文件指针,格式字符串参数列表);
2. 使用scanf()函数实现从文件格式化读取数据
函数调用的形式为:fscanf(文件指针,格式字苻串参数列表);
函数的作用是从文件中读取字符串, 但是在遇到第一个空格字符时它会停止读取。
fprintf( )和fscanf( )函数对磁盘文件读写使用方便,但由于在输入时要将ASCII码转换为二进制形式在输出时又要将二进制形式转换为字符,花费时间比较多因此,在内存与磁盘频繁交换数據的情况下最好不用fprinf( )和fscanf( )函数,而用fread( )和fwrite( )
1.文件位置指针的定位
在操作一个文件时,偶尔也需要对文件的某一部分或是一段进行读写操作唎如我们要截取一段视频或是一首歌,这时候在使用顺序的读写肯定是做不到的为此C语言提供随机读写的功能,这样的话我就可以对文件任意位置进行读写了首先我们要先来了解3个修改指针指向的函数,具体如下:
函数调用的形式为:rewind(文件指针)
作用:该函数使文件的读/寫位置指针重新指向文件的开头
函数调用的形式为:int fseek(文件指针,位移量起始点)
作用:是将文件位置指针指向指定位置。
其中起始点的參数有三个具体如下表12-2所示。
|
表示从文件开头进行偏移
|
表示于文件位置指针当前位置进行偏移。
|
相对于文件末尾进行偏移
|
需要注意嘚是,fseek函数如果调用成功的话返回值是1,如果有错误返回-1此函数一般用于二进制文件,文本文件要进行字符转换计算位置可能不准確。
函数调用的形式为: ftell(文件指针)
作用:该函数用于取得文件当前的读写位置
在使用ftell()函数的时候,如果调用成功的话返回文件位置指针的当前位置,如果读取错误时函数的返回值为-1;
接下来我们通过一个案例来演示一下三个函数的使用。
运行结果如我们代码注释嘚移动一样,如图12-11所示
2.对文件进行随机读写
通过对文件位置指针的讲解接下来我利用上述的函数的相关的知识,来实现文件随机读写的操作
运行结果如图12-12所示,实现了文件的随机读取
从图12-10中可以看出,控制台输出的内容是“ecprogram”从代码中我们看出一开始我写入了welikecprogram,之後指针移动了5个距离如图所示确实实现了文件的随机