首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言文件操作有关问题 ,多谢

2013-04-09 
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仍继续读;读写的内容当字节看待
弄混了

热点排行