Problem bei Datei öffnen



  • Ich habe vollgenden code

    char pfad[100];
    
    fgets(pfad,100,stdin);
    
    FILE *datei;
    datei = fopen(pfad,"w");
    fputs("Text", datei);
    fclose(datei);
    

    Wenn ich ihn ausführe, passiert nichts. Es wird keine Datei erzeugt, und logischer weise nix reingeschrieben, selbst wenn die Datei schon existiert. Wenn ich aber anstatt der Variable "pfad" den Dateipfad direkt angeben, klappt es einwandfrei. Das selbe Problem ist auch bei Read.

    PS: Ich benutze den GNU GCC Compiler.



  • Das könnte daran liegen, dass du 100 Elemente angelegt hast. Du solltest nach dem Ende der Zeichenkette in dem char suchen und ihn selber nullterminieren. 🙂



  • Das Ende suchen ist schwierig. Du solltest entweder Pfad vor Benutzung ausnullen oder fgets benutzen, das macht automatisch '\0'-Zeichen weil es einen String einließt. Als Bonus gibt fscanf die Länge des gelesenen Strings zurück, und wenn die gleich Bufferlength ist weißt du, dass der Nutzer einen zu langen Pfad eingetippt hat, was du aber bemerkst und du kannst dynamisch mehr Speicher alloziieren wenn nötig.

    const char Bufferlength = 100;
    char pfad[Bufferlength];
    if (Bufferlength==fscanf(stdin, "%*s", Bufferlength, pfad)){
        /*Todo: Pfad ist länger als Bufferlength, muss erneut lesen um alle Zeichen
          zu bekommen und danach müssen Pfad und die restlichen Zeichen zum 
          richtigen Pfad zusammengebaut werden */
    }
    


  • Die Datei wird nicht erzeugt, weil dir fgets das Newline ('\n') ans Ende der Zeichenkette anhängt. Dieses Newline ist eins von vielen in einem Dateinamen nicht erlaubten Zeichen.
    Schreib dir ne Funktion, die es entfernt:

    // Remove linefeed. Entfernt das '\n' Zeichen.
    void remlf ( char* s )
    {
    	char* p = NULL;
    	if ( s != NULL && NULL != ( p = strrchr (s, '\n' )))
    		*p = 0;
    }
    
    int main()
    {
    	char buf[BUFSIZ]={0};
    	fgets ( buf, sizeof(buf), stdin );
    	remlf ( buf );
    	// ...
    	return 0;
    }
    

    Gruß,
    B.B.



  • Danke Leute, es hat geklappt.



  • Big Brother schrieb:

    Dieses Newline ist eins von vielen in einem Dateinamen nicht erlaubten Zeichen.

    Erklär das mal meinem Dateisystem... 🙄

    #include <stdio.h>
    
    int main (void)
    {
        char buf[64];
        FILE *fp;
    
        fp = fopen("\n", "w");
        fputs("hello, world\n", fp);
        fclose(fp);
    
        fp = fopen("\n", "r");
        puts(fgets(buf, 64, fp));
        fclose(fp);
    
        return 0;
    }
    

    Gibt "hello, world" aus. Sachen gibt's!
    🙂



  • µngbd schrieb:

    ... Erklär das mal meinem Dateisystem... 🙄

    Was interessiert mich dein Dateisystem? Was hat das Problem des Threaderöffners mit deinem Dateisystem zu tun? Was hat der Threaderöffner davon, das es auf deinem Dateisystem läuft, während es bei seinem offensichtlich nicht funktioniert?



  • Big Brother schrieb:

    Was interessiert mich dein Dateisystem? Was hat das Problem des Threaderöffners mit deinem Dateisystem zu tun? Was hat der Threaderöffner davon, das es auf deinem Dateisystem läuft, während es bei seinem offensichtlich nicht funktioniert?

    Nichts?
    🙂



  • µngbd schrieb:

    Nichts?
    🙂

    Sag ich nicht!
    *bätsch* :p


Anmelden zum Antworten