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;

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章