EOF überlesen



  • Hallo, Zusammen,

    ich lese eine wav- Datei aus und dabei habe ich festgestellt, das einfach zwischendrin an 4 verschiedenen Stellen ein EOF (1A SUB) steht, obwohl die Datei noch weitergeht.
    Z.B im VLC wird die gesamte Datei abgespielt, nicht nur bis zum ersten EOF.
    Nun möchte ich in C mit fgetc oder besser noch fgets einfach über das EOF- Zeichen weglesen, d.h. auch danach noch weiterlesen und das EOF ignorieren. Ich kann ja vorher gucken, wie lang die Datei insgesamt ist.

    Wenn ich einfach die Abfrage auf Rückgabewert NULL weglasse, wird zwar brav weiter gelesen, aber die ausgelesenen Werte sind nach dem EOF nur noch Schrott.

    Aber irgendwie muss es ja gehen, dann VLC kriegt die Dateien ja auch gelesen.

    Hat jemand ne Idee, wie ich das bewerkstelligen könnte?

    [code]
    anz_zeichen = 0;
    fd_signal = fopen(datname, "rb" );
    while (anz_zeichen >= max_anz_zeichen)
    {
    c = fgetc(fd_signal);
    anz_zeichen++;
    }
    fclose(fd_signal);
    [\code]



  • fgets ist eine schlechte Idee, die hängt immer '\0' an und obendrein brauchst du einen Puffer, dessen Größe du vorher angeben musst (also bevor du weißt, wieviel Zeichen gelesen werden).
    "rb" Modus ist schon richtig, bei "r" brechen Windows-Programme tatsächlich bei 0x1a ab (zumindestens, wenn sie die msvcrt benutzen).
    Also lies entweder zeichenweise ein mit fgetc() oder wenn das zu langsam ist, mit fread, wobei du dann mit stat() vorher die Dateigröße bestimmen solltest (und dann auch gleich den Puffer mit der entsprechenden Größe anlegen kannst).



  • Ich denke nicht das EOF hier das Problem ist. Ich tippe eher dass c bei dir char ist und nicht int.



  • fread wäre auch noch eine Option



  • War das nicht so, dass als erstes explizit eof geprüft werden soll?



  • c ist int.
    Aber fread ist noch eine Option, hatte ich ganz vergessen, das es das auch noch gibt.
    Probiere ich gleich mal aus!



  • fread ist perfekt für mein Problem, danke für den Tipp!
    fread liest einfach die festgelegte Anzahl Zeichen aus, ohne sich um den Inhalt zu kümmern.
    Man muss eben nur vorher gucken, wie groß die Datei ist.


Log in to reply