1
C语言程序设计
1.10.4.3 9.4.3 数据块的输入输出——fread()、fw rite()

9.4.3 数据块的输入输出——fread()、fw rite()

fread()和fw rite()是两个用来读写数据块的函数。其调用方式是:

  int fread(void*buffer,int size,int n,FILE*fp)

  int fw rite(void*buffer,int size,int n,FILE*fp)

buffer是一个指向存放数据块的存储区的指针。在fread()函数中,buffer接收从文件中读取的数据;在fw rite()函数中,buffer中的数据向文件写入。读写的字段数用n表示(每个字段为size个字节)。fp是已打开文件的文件指针。文件位置指示器随所读取的字符数而增加。

fread()和fw rite()函数返回实际已读写的字段个数。若读写的字段数少于在函数调用时所要求的数目,说明可能发生了读写错误,或者读写已达到文件结尾。对于这种情况,可使用feof()或ferror()函数检验。

feof()用来确定文件位置指示器是否处于文件的结尾,若已达结尾,则返回一个非0值,否则返回0。

ferror()函数用来检测给定流中的文件错误,若有错,则返回非0值,否则返回0。

只要一个文件以二进制文件方式打开,fread()和fw rite()函数就可以读写任何类型的信息,但这两个函数最有用之处是读写数组或结构。

例9-9是一个使用fw rite()函数把整型数组中的数据写入一个指定文件的程序。例9-10是一个应用fread()函数从文件中读出数组数据的程序。两个程序都使用了强制转换符,将整型数据转换为字符型。原因是这两个函数读写数据是以字节为单位进行的。必须注意的是,fw rite()函数把数组写入文件时是以二进制形式存放的,而不是ASCII码形式,在读出时,使用printf()进行输出才能在显示屏上得到数组的内容。

例9-9 使用fw rite()函数的程序。

img686

例9-10 使用fread()函数的程序。

img687

img688

  程序运行结果:

  100

  110

  120

  130

  140

  150

  160

  170

  180

  190

运行结果说明,用fread()函数从文件arrdata中读出的数据,与用fw rite()函数向该文件写入的数据是相同的。