Checken ob zu öffnende Datei existiert!
-
Hi!
Kann ja sein, dass mal man 2 mal die falsche Datei öffnen will.
Das war nur ein Code Auszug.
Hat nicht funktioniert.Kann ich return 0 in die Abbruchschleife schreiben?
Danke,
Johannes
-
keboo schrieb:
Hi!
Kann ich return 0 in die Abbruchschleife schreiben?Ja klar.
-
Natürlich kannst Du... Macht es aber Sinn? Nunja, wenn Du nach dem ersten Schleifendurchlauf Dein Programm mit Fehlercode 0 (== kein Fehler) beenden willst, mach es

-
du kannst das return mehrfach eintragen.
int main(int argc, char **argv) { bool check=true; string dateiname; ifstream ifs(dateiname.c_str());) while(!ifs) { check = false; return 1; //damit wird das Programm aber beendet wenn die Datei nicht da ist , egal ob 0 oder 1. Das macht hier keine Sinn } return 0; }
-
// Stelle an die ich zurückspringen will getline(cin, output); ifstream ifs(dateiname.c_str()); if (!ifs) { cout << "Datei existiert nicht! " << endl; cout << "Bitte um Neueingabe " << endl; return // ---> will dass der code noch oben "returnt"; }Wie mach ich das?
Danke.
Johannes
-
das return bedeutet, daß die Funktion verlassen wird. "Nach oben returnt" habe ich auch noch nicht gehört, lustig.[cpp]
int main(int argc, char **argv)
{while(0==0) //Endlosschleife, du kannst auch eine for Schleife nehmen wenn es eine bestimmte Anzahl sein soll
{
getline(cin, output);
ifstream ifs("c:\\t.txt")if (!ifs)
{
cout << "Datei existiert nicht! " << endl;
cout << "Bitte um Neueingabe " << endl;
}
else
{
cout << "Hurra Hurra die Datei ist da!" << endl;
//Vielleicht noch eine Eingabe machen, damit das Fenster offen bleibt (cin)
}
}
return 0;
}
-
int main(int argc, char **argv) { while(0==0) //Endlosschleife, du kannst auch eine for Schleife nehmen wenn es eine bestimmte Anzahl sein soll { getline(cin, output); ifstream ifs("c:\\t.txt") if (!ifs) { cout << "Datei existiert nicht! " << endl; cout << "Bitte um Neueingabe " << endl; } else { cout << "Hurra Hurra die Datei ist da!" << endl; //Vielleicht noch eine Eingabe machen, damit das Fenster offen bleibt (cin) return 0; } } return 0; }
-
while (0==0) //Endlosschleife, du kannst auch eine for Schleife nehmen wenn es eine bestimmte Anzahl sein soll { getline(cin, dateiname); ifstream ifs(dateiname.c_str()); if (!ifs) { cout << "Datei existiert nicht! " << endl; cout << "Bitte um Neueingabe " << endl; } else { cout << "Datei geöffnet!" << endl; while (!ifs.eof()) { // Einlesen der DATEI getline(ifs, str); // Datei wird Zeile in Vector vec geschrieben vec.push_back(str); // Zeile wird an Vektor a++; } cout << "Bitte geben Sie die Output Datei an (nur Namen)." << endl; getline(cin, output); // Wie springt er mir an der Stelle aus der Schleife raus?? // Damit das Programm fortfahren kann mit der eingelesenen Datei? } }
-
break; verlässt die Schleife (und continue würde zurück zur Bedingung springen).
-
Du kannst die Abbruchbedingung in die While Schleife nehmen
bool jaaa = true; while(jaaaa) { //hier der ganze code if (!ifs) { } else { //hier dein weiterer Code jaaa = false; //zum Beispiel, dann wird die while schleife beendet } } // hier kannst du dann weitermachen return 0;
-
Vielleicht mach ich mich ja unbeliebt, aber natürlich sollte man das gute alte goto nicht vernachlässigen, auch wenn es schnell Spaghetti Code werden kann.
Einstieg: getline(cin, dateiname); ifstream ifs(dateiname.c_str()); if (!ifs) { cout << "Datei existiert nicht! " << endl; cout << "Bitte um Neueingabe " << endl; goto Einstieg; } else { cout << "Datei geöffnet!" << endl; } ...
-
using boost::filesystem; path myFile("C:/hallo.txt"); if(!exists(myFile)) std::cout << myFile.string() << " existiert nicht!"; if(isDirectory(myFile)) std::cout << myFile.string() << " ist keine Datei!";