关闭

我对C语言文件的理解

635人阅读 评论(0) 收藏 举报

我的网站 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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:11563次
    • 积分:233
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:3篇
    • 译文:0篇
    • 评论:4条
    文章分类
    文章存档
    最新评论