c实现的读大文件方法(源代码)

 

static char *file2memory(FILE *file, long *size)

{

  char buffer[1024];

  char *string=NULL;

  char *newstring=NULL;

  long len=0;

  long stringlen=0;

 

  if(file) {

    while((len = fread(buffer, 1, sizeof(buffer), file))) {

      if(string) {

        newstring = (char*)realloc(string, len+stringlen+1);

        if(newstring)

          string = newstring;

        else

          break; /* no more strings attached! :-) */

      }

      else

        string = (char*)malloc(len+1);

      memcpy(&string[stringlen], buffer, len);

      stringlen+=len;

    }

    if (string) {     

      string[stringlen] = 0;

    }

    *size = stringlen;

    return string;

  }

  else

    return NULL; /* no string */

}

 

static bool fillBufferWithContentsOfFile(const UString& fileName, Vector<char>& buffer)

{

    FILE* f = fopen(fileName.UTF8String().c_str(), "r");

    if (!f) {

        fprintf(stderr, "Could not open file: %s/n", fileName.UTF8String().c_str());

        return false;

    }

 

    size_t buffer_size = 0;

    size_t buffer_capacity = 1024;

 

    buffer.resize(buffer_capacity);

 

    while (!feof(f) && !ferror(f)) {

        buffer_size += fread(buffer.data() + buffer_size, 1, buffer_capacity - buffer_size, f);

        if (buffer_size == buffer_capacity) { // guarantees space for trailing '/0'

            buffer_capacity *= 2;

            buffer.resize(buffer_capacity);

        }

    }

    fclose(f);

    buffer[buffer_size] = '/0';

 

    return true;

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值