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