我对C语言文件的理解

我的网站 http://www.tigerion.cn

我对C语言文件的理解

以前在对C语言文件操作时,产生了很多困惑,于是便尝试建立一些观点,来解释这些困惑。下面则是我的观点。

一.文件读写函数有自己的规则,该规则不受文件打开方式("wt"还是"wb")的影响。

1 fprintf();该函数将要输出的项转化为字符串,然后将字符串输出到文件里。对打开方式是"w"或"wb"作用都一样。

如下例

#include <stdio.h>

#include <conio.h>

void main()

  {

     FILE *fp1;

     int i,d;

          fp1=fopen("e://abc.txt","w+"); /*下次调试改为wb+作用一样*/

          for(i=1;i<300;i++) fprintf(fp1,"%6d",i );

          fseek(fp1,0,0);

          while(!feof(fp1)) putchar(fgetc(fp1));/*证明fprintf()输出到文件中的绝对是字符串*/

          fseek(fp1,0,0);

          getch();

          while(!feof(fp1)){fscanf(fp1,"%d ",&d);printf("%-6d",d);}

           fclose(fp1);

         

  }

 

2 fscanf();该函数将数据以字符串方式读取,然后转化为控制串中的类型,再存放到指定的内存空间中。对打开方式是"rt","rb"等同。

 

3 fgetc(),fputc(),fgets(),fputs();将数据以字符形式存取,不受打开方式是二进制还是文本文件的限制。

 

4 fread(),fwrite()实现内存与文件中数据块的相互复制,不受打开方式是二进制还是文本文件的限制。

二 若能用定位 函数fseek()的可以称之随机文件,那么打开方式为"r","r+","rb","rb+","w+","wb+"等的都可以称之为随机文件。

 

如此说来,同一个文件即可以按文本方式存取,也可以按二进制方式存取,即可以按顺序读写,也可以按随机方式读写(也不受扩展名的限制)那么在c语言中,文件的类型则不属于文件本身,而是取决于所采用的读写函数,换句话说,把写文件看成编码,只要按照该编码对应的解码方式去读文件就能得到正确的数据。我不知道打开方式中"t"与"b"是否形同虚设,它对读写函数的结果没有影响。难道是对FILE指针有影响?

如果有必要的话,那就是对程序员的限制。因为一个文件存放在磁盘中有可能不知道它的类型。而扩展名的限制则将*.txt视为文本文件。这个规定很好用,避免了很多麻烦。而打开此类型的文件时就顺理成章地用文本文件操作的函数来处理。"t","b",或许是程序员遵守的一条规则,一个心理暗示吧。如果一个文件一开始采取文本方式读写,那么下面的操作就按照此种方式坚持下去,否则没有什么实际意义。

然而一个新的问题出来了,在C语言中对顺序文件与随机文件的规定有何重要意义?我想"w"(可以看成顺序)与"w+"(随机)应该是缓冲区不一样。然而"w+" 默认的就是顺序写文件,除非是用fseek()定位。我觉得改为顺序读写方式与随机读写方式更合理一些。否则就会引起一些概念上的混乱。

  我的网站 http://www.tigerion.cn

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值