现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

fread使用经验

2012-08-08 18:53 工业·编程 ⁄ 共 800字 ⁄ 字号 暂无评论

    在对fread使用时,每次读取完毕后,一定要判断返回值,如果返回值小于等于0,则表示读取失败,fp读取的是最后一个正确的内容。不要盲目相信文件的大小,比如下面代码:

FILE* fp = NULL;

fp = fopen("1.html", "r");

if (fp == NULL)

return;

int nFp = fileno(fp);//将文件描述符转为句柄

     int len = filelength(nFp);

XmlRpcValue::BinaryData& data = result;

int n = 0;

char c;

fseek(fp, 0, 0);

i = 0;

for(; n<len; n++)

{

i = fread(&c, 1, 1, fp);

if (i <= 0)//如果没有这个判断,则读取的内容是下面的结果

break;

std::cout << c;

data.push_back(c);

}

fclose(fp);

//result = "123";

}

其中1.html中的内容是

<?xml version="1.0"?>

<methodResponse>

       <params>

               <param>

                       <value>123</value>

               </param>

       </params>

</methodResponse>

没有fread结果判断,则读取内容是

<?xml version="1.0"?>

<methodResponse>

       <params>

               <param>

                       <value>123</value>

               </param>

       </params>

</methodResponse>>>>>>>>

原因分析:可能是tab键的原因,造成了文件长度和fread读取次数不一致。

给我留言

留言无头像?