Problem beim auslesen einer Datei.



  • #include <iostream>
    
    using namespace std;
    
    int main()
    {
        char pfad[40];
        FILE *fileobj;
        fileobj = fopen("ts.f20", "r");
        if (fileobj == NULL) {
            cout << "Fehler beim oeffnen der Datei\n" << endl;
            return 1;
        }
        else {
            if (fgets(pfad, 256, fileobj) == NULL) {
                if (ferror(fileobj)) {
                    perror("Fehler beim lesen der Datei\n");
                    return 1;
                }
                else {
                    cout << "Alles erfolgreich:\n" << endl;
                  //  cout << pfad << endl;
                }
            }
        }
        cout << "Schluss" << endl;
        return 0;
    

    Es wird nur Schluss ausgegeben, obwohl die datei ausgelesen werden soll. Mehr nicht. auch keine meldung das die datei nicht exestiert. Weiß wer warum?

    lg



  • Wenn deine Datei eingelesen werden konnte, also wenn fgets(pfad, 256, fileobj) nicht NULL zurückgibt muß das ja rauskommen.
    Dein zweiter else-Zweig muß eine Klammerebene tiefer.



  • Öhm, wolltest du jetzt ein C oder ein C++ Programm schreiben? Bis auf deine Standardein- und ausgabe hast du hier reinen C Code vor liegen. In C++ werden Filestreams und keine Filedeskriptoren genutzt.



  • Dein zweiter else-Zweig muß eine Klammerebene tiefer.

    Wie meinst du das?



  • Ich habe mal die öffnenden Klammer eins nach unten gesetzt, da sieht man es besser

    if (fgets(pfad, 256, fileobj) == NULL) // ja bedeutet Fehler
    {
        if (ferror(fileobj)) // Hier ein zweiter Fehlertest
        {
            perror("Fehler beim lesen der Datei\n");
            return 1;
        } else //jetzt sind wir immer noch beim Fehler
        {
            cout << "Alles erfolgreich:\n" << endl;
          //  cout << pfad << endl;
        }
    }
    

    Korrekt müsste das wohl so lauten

    if (fgets(pfad, 256, fileobj) == NULL) // ja bedeutet Fehler
    {
        if (ferror(fileobj)) // Hier ein zweiter Fehlertest
        {
            perror("Fehler beim lesen der Datei\n");
            return 1;
        } else //anderer Fehler
        {
            cout << "Irgendein Fehler:\n" << endl;
        }
    } else // fgets gibt nicht NULL zurück, also erfolgreich
    {
        cout << "Alles erfolgreich:\n" << endl;
    }
    


  • Das Array in das du einliest sollte auch mindestens so groß sein wie die max Anzahl der zeichen die du einlesen willst, also 256.

    Wenn du C++ Programmieren willst, dann nimm für sowas std::ifstream und std::string


Anmelden zum Antworten