C语言读写文件与二进制文件

   读写文件有“w”和“wb”格式,分别是以文本形式读写和以二进制形式读写。这对于日常读写数字和字符来说没有区别,但是两个地方有不同。

   1、文本方式读取要把回车,换行两个字符变成一个字符,相当于截短了文件。目前暂时还没有发现这样有什么特别之处。

   2、文本形式和二进制形式适用的结束符和读写函数不同。尤其是结束符的问题,很困扰人。

        在C标准函式库中,EOF(stdio.h中定义 #define EOF (-1) 表示文件结束符(end of file)。我们一般在while循环中以EOF作为文件结束标志。例如:

char chtemp;
FILE *fp;
if (NULL == (fp = fopen("1.txt", "r")))
{
	printf("error\n");
	exit(1);
}
while (EOF != (chtemp = fgetc(fp)))
{	}

       这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。ASCII码范围0-127,(一个字节8位,能表示256,对于一个字节的char来说是-128~127,对于unsigned char来说是0-255)。采用全1,也就是11111111(补码形式)表示-1,用-1代表文本的结束符EOF,比如说getc函数一个字节一个字节读,读到一个字节为11111111,它就认为文本结束,停止了。对于以ASCII存储的文本来说,不会有任何问题。因为所有你文本中看得见的字符,都是在00000000-01111111之间的。

       但是,把数据以二进制形式存放到文件中时,肯定会有-1的。比如我做一个哈夫曼编码,把文本变成了01码,肯定不能直接以char类型的‘0’和‘1’即ASCII码的48,49来进行存储,所以进行压缩,一个字节可以用来储存8个01码。此时我文本中很有可能出现连续8个1。所以不能采用EOF作为二进制文件的结束标志。为解决这个问题,必须要用feof函数,用来判断文件是否结束。如果遇到文件结束,函数feof(fp)的值为1,否则为0,feof不会被文件中的内容干扰,相当于额外加了一个结束符。

       feof函数既可用以判断二进制文件是否结束,也可以用以判断文本文件是否结束。但是feof用以判断文本文件尾时,如果代码编写不当,可能会把文本文中中的文件结束符EOF也读取出来了,需要注意(暂时还没有遇到)。

http://www.cnblogs.com/cy568searchx/archive/2012/10/18/2728894.html里面写的很好,很清楚。还有一些就不细写了。多多学习!




  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值