ifstream::seekg() og ifstream::tellg() retunerer en long. Size of long er 4 bytes hvilket er 32 bit. Da det er unsigned long, er det 31 bit hvilket giver max 2Gb før tallet bliver negativt. Det samme gælder for standard lib seek() og tell().
Du kan omgå dette problem ved at anvende en løkke struktur, hvor du bevæger dig i forhold til nuv. position:
int longseek(FILE* stream, double noffset, int nwhence) { const long brkValue = 0x7FFFFFFF; long toffset; double offset; int whence; int sign; int retVal;
/* If offset not above fseek's max long value, call fseek */ /* directly and return it's value. */ if (offset < brkValue) return fseek(stream, (long)offset, fromWhere);
/* Offset above 2 GIGA - forward or back. Work on absolute */ /* figures, and use only sign when necessary. */ if (noffset < 0) { offset = -noffset; sign = -1; } else { offset = noffset; sign = 1; }; whence = nwhence; while (offset > 0) { if (offset > brkValue) toffset = brkValue; else toffset = offset; offset -= toffset; retVal = fseek(stream, toffset * sign, whence); if (retVal != 0) break; whence = SEEK_CUR; }; /* While not there yet.*/
Det er jeg godt klar over, men så kan jeg lige så godt benytte __lseeki64() og __ltelli64(). Det var for at undgå at omskrive min kode fra C++ stream klasse til standard C lib funktioner.
Jeg har omskrevet min kode til at benytte _lseeki64 og __telli64.
soepro - tak for dit svar, men det løste ikke mit problem.
Da jeg ikke har modtaget et gyldigt svar har jeg tilbageført point til mig selv.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.