我对C语言文件的理解

原创 2007年09月26日 13:34:00

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

相关文章推荐

对于C语言头文件里面extern的理解

如果想在一个C文件里面引用另外一个C文件里面的变量,怎!么!办? 我们的做法是将变量在H文件中声明为ertern,然后在其他文件中导入这个H文件。 这里需要注意的是,如果导入了H文件,那就不能声明...
  • qc_liu
  • qc_liu
  • 2014年12月29日 12:42
  • 991

#include<stdio.h>怎么理解,stdio.h是什么头文件,是不是每个C语言程序都要加?

include 称为文件包含命令,其意义是把尖括号""或引号        stdio.h就是指“standard input&output"意思就是说标准输入输出头文件!所以用到标准输入输出函数时...

c语言中的h文件与c文件的理解、编写及使用

【by:mallon】    在c语言编程中,我们会将要实现的应用写成.c文件:系统级的应用,我们会编写一个含有main函数的.c文件,来实现系统级的函数调用已达成我们所要的功能;具体的各个功能模块...

C语言读取及修改简单配置文件内容

运行环境:ubuntu14.04此方式适合小的配置文件,不适合大型文件。假如有文件内容为: IP=192.168.1.20 MASK=255.255.255.0 DNS=192.168.1.1#...

C语言文件操作之fgets()

来说一说fgets(..)函数。     原型  char *  fgets(char * s, int n,FILE *stream);     参数:          s: 字符型指针,指向存储...

C语言 获取指定目录下的文件列表

//获取指定目录下的所有文件列表 char** getFileNameArray(const char *path, int* fileCount) { int count = 0; char *...

打开c语言生成exe文件,出现闪退的解决方法

额,在给大一学弟上第一节实验课的时候,经常有学弟问我,为什么打开c语言生成的exe文件,立马闪退。 起初个别问的时候,我只是简单的说明程序运行完了,就自动关了,现在先不用涉及这个,以后自然懂了。 ...
  • hitwhylz
  • hitwhylz
  • 2013年11月04日 10:50
  • 20141

C语言习题5.24--文件操作1

问题描述及代码: 题目描述 文本文件score.dic 中存储了n名学生的信息(班级编号,姓名,成绩),每个学生信息占一行,每行的数据之间使用制表符分割,如下所示: 145811...

C语言文本方式和二进制方式打开文件区别

转自:http://blog.sina.com.cn/s/blog_50b7dd7101012979.html, 我们都知道,文本文件和二进制文件在计算机上面都是以0,1存储的,那么两者怎么还存在差...
  • ipmux
  • ipmux
  • 2014年03月07日 10:18
  • 1006

关于C语言头文件保护的一些认识

c语言头文件怎么写? 大致格式: #ifndef __ABC_H__ #define __ABC_H__ //以上是为了防止头文件被多次包含,可以省略,最好有,名字任意,保证唯一即可 //以下...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:我对C语言文件的理解
举报原因:
原因补充:

(最多只允许输入30个字)