stream-frage



  • filesize = unsigned long
    stream = FILE *

    char buf1;
    	fseek(stream,0,SEEK_SET);
    	for(unsigned long int i=0;i<filesize;i++)
    	{
    		fread(&buf1,1,1,stream);
    		fseek(stream,-1,SEEK_CUR);
    		printf("\n%c",buf1);
    		fwrite(&buf1,1,1,stream);
    	}
    

    kann mir jemand sagen, was dieser code macht? weil er macht gewiss nicht das, was er sollte.
    Sollte die Datei danach nicht komplett gleich aussehen? (modus: "r+b")

    mfG (c)h



  • ...
    char buf1;
    // Dateicursor an den Anfang der Datei setzten
    fseek(stream,0,SEEK_SET);
    // Schleife über alle Zeichen der Datei
    // (Vermutung wegen "filesize")
    for(unsigned long int i=0;i<filesize;i++)
    {
      // 1-Byte von der Datei in bufl lesen
      // Hierbei wird der Dateicursor eine Stelle weiter gesetzt
      fread(&buf1,1,1,stream);
      // Dateicursor wieder eine Stelle zurück setzen
      fseek(stream,-1,SEEK_CUR);
      // Ausgabe
      printf("\n%c",buf1);
      // 1-Byte von bufl in Datei schreiben
      // Hierbei wird der Dateicursor wieder eine Stelle weite gesetzt
      fwrite(&buf1,1,1,stream);
    }
    ...
    

    Letztendlich wird eine Datei zeichenweise eingelesen,
    jedes Zeichen in eine extra Zeile auf der Konsole
    ausgegeben und das gelesene Zeichen wieder mit
    dem gelesenen Zeichen überschrieben (je nachdem
    wie die Datei geöffnet wurde).

    Sehr merkwürdig 🙂



  • danke für die kommentare, aber in den kommentaren steht das, was ich erwartet hatte.
    ich habe vor der schleife "filesize" abgefragt, und die größe war korrekt.
    (natürlich ist es nicht ein so sinnvolles programm, welches einen wert mit denselben wert überschreibt, sondern der wert wird zwischendurch bearbeitet)

    ich dachte jedoch zuerst dass der fehler woanders liegen müsste, also habe ich die veränderung mal auskommentiert (und hier nicht gepostet)

    wenn ich den code ganz weglasse, stimmt der dateiinhalt.
    wenn ich den code ohne bearbeitung einfüge, stimmen nur noch die ersten beiden zeichen. der rest wird mit dem 2. zeichen überschrieben.

    bsp..
    filesize=13
    ausgabe (test das ist):
    t
    e
    e
    e
    e
    e
    e
    e
    e
    e
    e
    e
    e

    beim "steppen" ist mir aufgefallen, dass beim 3. fread der 2. wert eingelesen wird. weiss jemand rat? wie gesagt die datei wurde mit "r+b" geöffnet

    mfG (c)h



  • Neuer, FUNKTIONIERENDER code:

    for(unsigned long int i=0;i<filesize;i++)
    {
       fseek(stream,i,SEEK_SET);
       fread(&buf1,1,1,stream);
       fseek(stream,i,SEEK_SET);
       printf("\n%c",buf1);
       fwrite(&buf1,1,1,stream);
    }
    

    Alter NICHT funktionierender code:

    fseek(stream,0,SEEK_SET);
    for(unsigned long int i=0;i<filesize;i++)
    {
        fread(&buf1,1,1,stream);
        fseek(stream,-1,SEEK_CUR);
        printf("\n%c",buf1);
        fwrite(&buf1,1,1,stream);
    }
    

    FRAGE:
    Was ist der Unterschied?

    mfG (c)h

    PS.: ich liebe unlogische Fehler 😃

    :xmas1: Frohe Weihnachten! :xmas1:


Anmelden zum Antworten