C语言文件操作问题请教大家,谢谢问题描述:1.文件A,存放一行字母:ABCDFF (大小应为6 bytes)我想通过读文件A
C语言文件操作问题 请教大家,谢谢
问题描述:
1.文件A,存放一行字母:ABCDFF (大小应为6 bytes)
我想通过读文件A,得到A的大小
2.运行以下代码后,
int getFileLength(FILE *f)
{
int fLength = 0;
while(!feof(f))
{
fgetc(f);
//printf("%d",fgetc(f)); //调试
fLength++;
}
return fLength;
}
得到文件长度fLength等于7,不是应该是6吗?
3.我用printf("%d",fgetc(f));调试,最后输出的一个数是-1
这个-1是文件的结束符吗?
但是又怎么会输出来呢?
因为我的循环条件已经做了限制嘛
希望大家给予解释,谢谢 c 语言 file
[解决办法]2.还有一个文件结束符啊,所以是7
3.最后一个字符是文件结束符EOF,EOF的值刚好是-1
[解决办法]foef 的返回值为0或1。当文件结束 时返回1,否则为0;你的那个-1是字符串结束符"\n";
你的条件是 当文件结束时结束循环,不是 当读到为"-1"就结束循环。
一般情况下还是不怎么使用EOF。因为当文件操作错误,返回-1时,也会误判为文件结束符。
[解决办法]不用读文件,即可知道大小。文件小了,通过读,感觉不出什么来,如果文件极大,那么读起来就慢多了。。。
代码如下:
int getFileLength(FILE *f)
{
int fLength = 0;
fseek(f, 0, SEEK_END); //转到文件末尾
fLegnth=ftell(f); //取得文件指针的位置。
return fLength;
}
[解决办法]你的函数,为什么会得到7的文件长度,是因为你读取文件后,没有判断文件是否结束,就fLength++了,应当读后,判断是否结束,如果结束,就跳出,不++。
int getFileLength(FILE *f)
{
int fLength = 0;
while(!feof(f))
{
fgetc(f);
if(feof(f))
{
break;
}
//printf("%d",fgetc(f)); //调试
fLength++;
}
return fLength;
}
[解决办法]推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待
和
fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了