29. januar 2003 - 21:03Der er
15 kommentarer og 2 løsninger
ftell/fread på Win32
Jeg har lavet følgende simple program, der virker fint under linux. Såvidt jeg har kunnet læse i diverse hjælpefiler, burde det også virke under win32, hvor man bruger io.h istedet for unistd.h. Men det gør det ikke.
Kan du ikke prøve at forklare hvad det er koden gerne skulle gøre ? Skal den læse indholdet af "index.tpl" til en buffer og printe bufferen til stdout ?
int main(void) { int fd; int len; char *content; if ((fd = open("index.tpl", O_RDONLY)) == -1) fail("open"); len = lseek(fd, 0, SEEK_END); lseek(fd, 0, SEEK_SET); content = new char[len+1]; printf("Len is: %d\n", len); if ((len = read(fd, content, len)) < 1) fail("read"); printf("Read %d bytes\n", len); getchar(); content[len] = 0; puts(content); delete [] content; getchar(); return 0; }
Jeg får flg. resultat på skærmen: Len is: 5345 Read 5223 bytes Hvorefter den udskriver HELE indholdet af filen, der mangler ikke noget...
Så det store spørgsmål går i virkeligheden ud på hvorfor seek til slutningen af filen tilsyneladende giver en position, der er 122 bytes for meget i forhold til længden!?!?
den er 5.345 når jeg laver dir... men jeg er sikker på at I har ret. jeg prøvede at lave en binary read og så passede pengene :)
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.