Dimenticavo:

codice:
size = file.tellg();
in questo modo size contiene la posizione corrente nel file.
Quindi se sei all'inizio del file vale zero se sei alla fine è pari
alla lunghezza del file (o un valore intermadio se ti trovi in
altra posizione).

Quindi con

codice:
memblock = new char [size];
richiedi una memoria pari alla posizione in cui ti trovi
sul file (es: se sei sul secondo byte del file richiedi due byte).
E' proprio questo che volevi fare?