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

本文介绍了两种将文件内容读取到内存中的方法。一种是使用C语言的动态内存分配和文件读取函数,逐块读取文件内容并连接成一个完整的字符串;另一种方法则利用了C++容器Vector,通过不断调整容量来存储整个文件的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值