Checken ob zu öffnende Datei existiert!
-
Hi Leute!
Wie checke ich am besten, ob eine zu öffnende Datei existiert?#include <sstream> #include <fstream> #include <iostream> #include <vector> #include <string> using namespace std; int main(int argc, char **argv) { bool check=true; string dateiname; ifstream ifs(dateiname.c_str());) if (!ifs) { check = false; return 1; // Wie sag ich ihm, dass er dann wieder an den Beginn gehen soll? } }Ich möchte quasi haben, dass die Dateinamen auf Gültigkeit gecheckt werden.
Danke.
Johannes
-
Hi
Mit
return 1;beendest du die Funktion und somit das Programm, da es die main Funktion ist. Den Check auf Existenz der Datei machst du doch schon mit
if (!ifs).
Hat das Programm wirklich funktioniert?#include <sstream> #include <fstream> #include <iostream> #include <vector> #include <string> using namespace std; int main(int argc, char **argv) { bool check=true; string dateiname; ifstream ifs(dateiname.c_str());) while(!ifs) //eine Möglichkeit, aber warum willst du es mehrfach probieren?? { check = false; } return 0; //das fehlt eigentlich, muss am Ende vor der letzten Klammer stehen }
-
http://www.c-plusplus.net/forum/viewtopic-var-t-is-125205.html
Weiß nicht ob dir das weiterhilft, aber n Versuch ist es wert...
-
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!";