数学建模社区-数学中国
标题:
fputc和fgetc函数读写二进制文件
[打印本页]
作者:
sea_star666
时间:
2011-8-26 00:52
标题:
fputc和fgetc函数读写二进制文件
文件分两种,ASCII文件和二进制文件,fputc函数和fgetc函数读写ASCII文件的数据,用这两个函数同样可以读写二进制文件,只不过有点小的差别。
我们知道,ASCII文件也叫文本文件,是一个字符串序列,每个字符串由ASCII码来表示,而二进制文件就是直接将数据在内存中的保存形式搬到文件中。文件读取最重要的是要知道什么时候已经读完全部数据了,在读取ASCII文件的时候知蚁介绍过,需要通过EOF判定是否是文件结尾,如果fgetc函数的返回值为EOF,也就说明数据读取完了。(在stdio.h中EOF被定义为-1)。
为什么EOF可以作为ASCII文件结束符
ASCII文件由字符构成,是一个字符序列,字符由ASCII码来表示,ASCII码得范围为0-255,因此在读取ASCII文件的时候,只要没有到文件结尾,通过fgetc函数读取到的值就不会是-1,因此用EOF来表示ASCII文件结束是完全没问题的。
二进制文件读取时候的问题
在用函数fgetc读取二进制文件的时候,是一个字节一个字节进行读取的,而很可能在文件未结束前就读取到值为-1了,因为二进制文件是一个字节序列,这个时候用EOF来表示文件结束就会有问题了,会导致数据读取不全。这时,虽然fgetc函数的返回值为EOF,但是这个并不是真正的文件结束,那如何知道文件什么时候真正结束呢?
为了解决这个问题,ANSI C只好定义一个函数feof用来判定文件是否真的结束。
feof函数
feof(pFile);
feof函数的参数为文件结构指针,如果文件结束,则feof函数返回值为1,否则为0。
C语言:
while(!feof(pfile))
{
ch = fgetc(pfile);
putchar(ch);
}
上面的代码片段就是读取一个文件的数据,并显示到屏幕上,这里并没有指明是二进制文件,因为feof函数也支持ASCII文件,因此我们通过fgetc函数读取文件的时候可以不管文件类型直接这样调用。
putc函数和getc函数
这两个并不是什么新函数,而是系统将fputc和fgetc函数定义为宏名putc和getc了,因此这个其实是和fputc和fgetc函数完全一样的功能,主要是书写方便而已。
putw函数和getw函数 puts函数和gets函数
getc函数和putc函数是用来读写一个字符的,这样一个个的读写无法满足我们的需要,getc和putc可以理解为读写一个字节,而getw和putw则是读写一个字,也就是读写两个字节。gets和puts函数则更进一步,读写一个字符串,也就是说每次可以读写n个字节的数据。
从原理上来说,putw和puts最终都是调用的putc,我们完全可以设计我们自己的函数用来读写任意类型的数据,例如我们可以设计读写浮点型数据的函数putf和getf等
转自:知蚁博客
作者:
心我所想
时间:
2011-12-1 09:25
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5