while fopen Funktioniert nicht



  • Hallo C Gemeinde,

    ich hoffe das ihr mir bei dem Problem weiterhelfen könnt.

    Kurze Erklärung:
    Ziel ist es aus vielen Dateien mit der gleichen Endung "*.txt" eine einzig neue erstellen.

    Bei diesem aufruf " (QUELL_PDF = fopen( datei ,"r"))" öffnet er nur die Datei wenn ich den Dateinamen in Klartext in doppelte Hochkommas stelle.

    Meine Frage, warum öffnet er die Datei nicht wenn ich den Dateiname in eine Variable schreibe und sie versuche mit fopen zu öffnen.

    Q_LIST ist der Filehandle der auf die Liste mit den Dateien Zeigt die als Quelle dienen soll.

    while ( fgets( buf, 255, Q_LIST)){

    p = strrchr( buf, '\');
    strncpy (datei,buf + (p-buf+1),255);
    if ( (p = strrchr( buf, '\')) != NULL)
    *p = 0;

    chdir(buf);

    printf("%s\n",buf);
    printf("%s\n",datei);

    if ( (QUELL_PDF = fopen( datei ,"r")) == NULL){
    fprintf(stderr, "%s\n", strerror(errno));
    } else {
    while( (c=fgetc(QUELL_PDF)) != EOF)
    fputc(c,ZIEL_PDF);

    fclose(QUELL_PDF);
    }
    chdir(home);
    }

    Danke im Voraus 🙂



  • SnowDevil schrieb:

    Q_LIST ist der Filehandle der auf die Liste mit den Dateien Zeigt die als Quelle dienen soll.

    Q_LIST ist ein Filehandle, das auf eine Datei verweist, deren Inhalt zeilenweise eine Liste von Dateinamen mit Pfad enthält.

    Warum splittest du nach Pfad/Dateinamen auf, wenn du dann sowieso in das Verzeichnis wechselst? Warum sparst du dir chdir und das Splitten nicht und nimmst den kompletten Dateinamen?
    Für deine Kopieraktion wäre der Modus "rb" besser als "r".



  • Hallo Wutz,

    erstmal danke für den schnelle Beitrag.

    1. Bei dem Problem mit fopen ändert es nichts ob man den ganzen Pfad incl. Dateinamen angibt oder es auf diese weise macht.

    2. Zur rb read/byte oder only read man hat vieleicht ein schnelleres Programm aber nur wenn man soweit kommt das es läuft.

    aber nochmals danke für den Beitrag.



  • Gehe davon aus, dass fopen richtig arbeitet, der Fehler liegt bei dir in der Befüllung von "datei". Lass dir "datei" ungesplittet ausgeben; was gibt den die Fehlermeldung nach fopen aus?
    Dein "r" Kopieren arbeitet fehlerhaft sobald du unter Windows/DOS arbeitest und die Datei mind. eine Bytesequenz 0xd,0xa enthält. Mit Performanz hat das nichts zu tun.
    Nach einigem Grübeln glaube ich jetzt, die Ursache gefunden zu haben:
    füge mal nach fgets ein:

    if( strchr( buf, '\n' ) ) *strrchr( buf, '\n' )=0;
    

    Ändert aber nichts daran, dass deine chdir-Variante unportabel, fehleranfällig und unperformant ist. Auch geht das Absplitten von DOS-Pfaden besser/performanter mit:

    if( datei=strrchr(buf,'\\') ) *datei++=0;
    


  • Danke Wutz es war der abschluß der buf Variable da war noch "cr/lf" das mit
    der Codezeile "if( strchr( buf, '\n' ) ) *strrchr( buf, '\n' )=0;" behoben wurden

    nochmals vielen Dank

    bis die Tage 👍 🙂


Anmelden zum Antworten