今天当我想用FILE指针操作一.rmvb文件时发现不能对其读取.
起初我以为是那个电影文件太大,C对操作文件的大小有限制.
然后我就分别拿一些文件试验.发现:
读文件时:
不能打开文件扩展名>=4的文件.总会返回NULL.
写文件时文件扩展名可以>=4.
按文件位置指针的最大值原理上可以最大操作2047MB(2GB)的文件
但实际上不知是否一样.
还有一点:
文件位置指针是从0开始,
最后一个字节是EOF标志.
当建立一文件后,会自动在末尾写入EOF标志,所以对文件拷贝后比原文件大一字节.
用feof(fp)判断文件结束有点问题,不知这个函数原型是怎么定义的,
是如何判断文件结束的.
如
while(!feof(fp))
{
printf("%d",ftell(fp));
putchar(fgetc(fp));
}
你会发现输出的字符中有'Y',这个是文件结束标志,-1,他会转化成(无符号数unsigned char)255输出,所以ASCII码'y'
然后:
fseek(fp,0L,SEEK_END); /*把文件位置指针移到最后*/
printf("%d",feof(fp));
/*输出时不是你想的1,虽然已经是文件最后,但它输出的是0.
这儿很让人纳闷.
*/
对文本文件的操作:
1.用ASC码方式
fputc('\n');
向文件里面写放'\n'时,会自动在前面加上'\r'(回车),多一字节.
实际写放的是两个字节.'\r','\n'
读入时,会把回车换行变成一个字节,只保留'\n'
fgets(str,n,fp)函数,读入数据的结束条件是遇到EOF或换行符,
注意:虽然遇到换行符就会结束,但换行符也会读入内存.
fgets的返回值为str的首地址,苦读到文件尾或出错,返回NULL.
2.二进制方式
这个不会增删字节.
但生成文件的话总会在尾部添加EOF标志,多一字节.
上面就是我的总结.错误处希望大家指正,feof()它的判断原理谁懂的话请讲一下.
[此贴子已经被作者于2007-2-3 10:27:15编辑过]