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!";
    

Anmelden zum Antworten