datei rückwärst auslesen/einlesen



  • hallo, hab ein Programm geschrieben, das eine textdatei einliest und dann wieder rückwärts ausgeliest und in einer datei gespeichert wird. Das Problem hierbei ist, aber dass nur der letzt Buchstabe gespeichert wird.

    #include <stdio.h>
    #include <stdlib.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <sys/stat.h>
    #include <sys/types.h>
    #define MAXBYTES 1024
    
    int main(int argc, char **argv) {
       int in,out,count;
       char buffer[MAXBYTES];
    
       if(argc < 3) {
          printf("programmname quelldatei zieldatei\n");
          return EXIT_FAILURE;
       }
       if((in=open(*++argv ,O_RDONLY)) == -1)
          printf("Fehler open %s\n", argv);
         lseek(in,-1L, SEEK_END);
    	printf("reverse\n");
       if((out=creat(*++argv,0600))==-1)
          printf("Fehler  %s\n", argv);
       while(count = read(in, buffer, MAXBYTES))
          write(out,buffer,count);
       close(in);
       close(out);
       return EXIT_SUCCESS;
    }
    

    wie mache ich das nun? 😕



  • mit fopen, fwrite, fclose statt unix system calls?



  • War das jetzt ne Frage? Es sollte schon mit der Methode lseek und read funktionieren.



  • na guck. scheinbar ist dir die funktionsweise von seek nicht klar.

    du springst ans letzte byte der datei und willst dann einen ganzen block lesen. klar ist da nur ein zeichen drin.

    gelesen wird vorwaerts. seek springt nur umher.

    was hast du denn gedacht, was seek macht?



  • seek ist eine Art "Zeiger", ab der Position ab wo man z.B was lesen will. Mir ist schon klar, dass ich nur das letzte Zeichen lese, da ich ja nur -1L stehen habe. Ich müsste ja von -1L, weiter nach oben lesen. Ich habe mir gedacht drumherum ne schleif ezu machen und es laufen zu lassen so dass die Datei durchlaufen wird, also die -1L , nach jedem Schritr "erniedrigt" wird. Aber es funktioniert trotzdem nicht. 😞



  • http://www.cppreference.com/stdio/fseek.html
    seek_cur

    da seekst du immer ein stueck, liest nen block, drehst den IM SPEICHER um (schneller), usw

    und lass das L nach der -1 weg. absolut unnoetig.
    und rueck deinen code mal nett ein. sowas will doch keiner lesen. fuer schlechtes schriftbild werden in der schule nicht grundlos punkte abgezogen.


Log in to reply