我对C语言文件的理解 - 虎城空间 - CSDNBlog

来源:百度文库 编辑:神马文学网 时间:2024/04/28 19:39:54
 我对C语言文件的理解    
我对C语言文件的理解
以前在对C语言文件操作时,产生了很多困惑,于是便尝试建立一些观点,来解释这些困惑。下面则是我的观点。
一.文件读写函数有自己的规则,该规则不受文件打开方式("wt"还是"wb")的影响。
1 fprintf();该函数将要输出的项转化为字符串,然后将字符串输出到文件里。对打开方式是"w"或"wb"作用都一样。
如下例
#include
#include
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()定位。我觉得改为顺序读写方式与随机读写方式更合理一些。否则就会引起一些概念上的混乱。