C读取文件的一行

 

刚刚完成的C读取文件一行数据,可以读大量数据的行。

 

/*
函数功能:
   读取文件的一行,当开辟内存不够时return值为-1,size会给出至少需要的内存大小,
      return值为1时表示此时文件结束,从buffer,size得到最后一行的数据和大小。
输入参数:
   stream:文件流
      size:buffer大小,开辟内存大小
输出参数:
      buffer:存放一行字符
      size:buffer大小,字符数目
返回值:
   -1:读取发生错误
      0:成功读取
      1: 文件结束
备注:
      2010.01.11
*/
int rtFGetLine(FILE *stream,char *buffer,int &size)
{
 static unsigned long offset = 0;
 
 bool fileend = 0;
 unsigned long bufsize = 1024;
 char *buf = NULL, *dest = NULL;
 unsigned short inc = 1;
 
 if(!stream || !buffer)
 {
  return -1;
 }

 while(1)
 {
  bufsize *= inc;
        buf = (char *)malloc(sizeof(char)*bufsize);
  if(NULL == buf)
  {
   return -1;
  }
  memset(buf,0x00,bufsize);
  fseek(stream,offset,SEEK_SET);  
  fread(buf,sizeof(char),bufsize,stream);
  if(ferror(stream))
  {
   return -1;
  }
 
  dest = strchr(buf,'/n');
  if(NULL == dest)
  {
   if( strlen(buf) >= bufsize - 1 )//该行字符大于bufsize
   {
    inc++;
    free(buf);
    buf = NULL;    
    continue;
   }
   
   if(feof(stream))//文件包含结束标志
   {         
    offset += strlen(buf) + 2;
    fileend = 1;
    break;
   }
  }
  
  fileend = 0;
  *(buf + (dest - buf))=0x00;
  offset += dest - buf + 2;
  break;
 }
 
 if(strlen(buf) < size)
 {
  memset(buffer,0x00,strlen(buffer));
  strcpy(buffer,buf);
  size = strlen(buf);  
  free(buf);
  buf = NULL;

  return mvb_end;
 }
 //存储空间不够
 size = strlen(buf);
 free(buf);
 buf = NULL;
 
 return -1;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值