fstream .txt Datei nicht vorhanden!!



  • Hallo C++ Community,
    Ich bin neu im Forum und bitte für Fehler um Entschuldigung! Mein Problem ist folgendes:
    Ich habe diesen Code geschrieben, zum Schreiben einer txt Datei!
    // Datei schreiben
    #include <iostream>
    #include <string>
    #include <fstream>
    using namespace std;
    int main()
    {
    string inhalt;
    fstream f;
    f.open("Eingabe.txt", ios::app);
    cout << "Geben Sie einen Text ein: " << endl;
    getline(cin, inhalt);
    inhalt += "\n";
    f << inhalt;
    f.close();
    }```cpp

    Die Datei "Eingabe.txt" wird auf C:\Cpp_Ordner\Schreiben\Schreiben gespeichert!
    Das funktioniert!
    
    Zum Lesen der Datei "Eingabe.txt" hab ich diesen Code geschrieben:
    
    ```cpp
    // Datei.txt Ausgabe
    #include <iostream>
    #include <string>
    #include <fstream>
    
    using namespace std;
    int main()
    {
    	string inhalt;
    	fstream f;
    	f.open("Eingabe.txt", ios::in);
    	if (!f)
    	{
    		cerr <<"Eingabe.txt nicht gefunden!!";
    	}
    	else
    		while (getline (f,inhalt))
    		{
    			cout << inhalt << endl;
    		}
    		
    		f.close();
    }```cpp
    
    
    Wenn ich diesen Code ausführe kommt diese Meldung in der Konsole:
    Eingabe.txt nicht gefunden!!
    C:\Cpp_Ordner\Lesen\x64\Debug\Lesen.exe (Prozess "4236") wurde mit Code "0" beendet.
    Müsste es nicht eigentlich eine \Lesen.txt Datei sein???
    Wo ist der Fehler, was mache ich falsch??
    Hab mich schon durch etliche Beiträge gelesen aber ich finde keine Lösung!
    Ich benutze Visual Studio 2022 
    Habe es auch schon im Code::Blocks versucht, genau das gleiche!!
    Ich hoffe Ihr könnt mir helfen!
    
    Gruß


  • Die Ordner "C:\Cpp_Ordner\Schreiben\Schreiben" und "C:\Cpp_Ordner\Lesen\x64\Debug" sind doch unterschiedlich - wie soll das Lesen-Projekt dies wissen?

    Warum benutzt du nicht dasselbe Projekt zum Schreiben und Lesen der Datei?

    PS: Formatiere mal deinen Beitrag etwas besser.



  • @FOKUS Lesen.exe heißt das Programm, das du compiliert hast und das ausgeführt wurde.

    Der Status 0 besagt, dass es keinen Fehler gemeldet hat.



  • Danke erstmal für die Antworten und sorry wegen dem Formatieren. Ich bin noch nicht ganz vertraut mit den Gepflogenheiten des Forums!
    Werde versuchen es besser zu machen!
    "C:\Cpp_Ordner\Schreiben\Schreiben"
    "C:\Cpp_Ordner\Lesen\x64\Debug"
    Ja die Ordner sind unterschiedlich, ich bin davon ausgegangen das es reicht wenn man den Namen der txt angibt! Das wäre hier ja "Eingabe.txt"
    Also müssten beide Projekte in dem selben Ordner gespeichert/angelegt werden? Das habe ich noch nicht ganz verstanden!

    @Th69 Warum benutzt du nicht dasselbe Projekt zum Schreiben und Lesen der Datei?

    Das werde ich mal machen aber es müsste ja auch so gehen! Und die Tatsache das ich es nicht hinbekomme, wurmt mich doch schon und ich
    möchte gerne eine Lösung finden!
    Wenn das schon nicht klappt, wie soll es denn dann weiter gehen 🙂
    Ich denke Ihr versteht mich^^



  • @FOKUS sagte in fstream .txt Datei nicht vorhanden!!:

    Ja die Ordner sind unterschiedlich, ich bin davon ausgegangen das es reicht wenn man den Namen der txt angibt! Das wäre hier ja "Eingabe.txt"

    Warum bist Du davon ausgegangen?
    Du könntest hunderte Dateien mit dem Namen "Eingabe.txt" auf Deinem Rechner haben, in verschiedenen Ordnern natürlich. Woher soll Dein Programm wissen, wo es suchen, welche es nehmen soll?
    Wenn Du keinen Pfad angibst, sucht Dein Programm in dem Ordner, in dem die exe-Datei liegt (es sei denn, Du setzt explizit ein Working Directory).



  • @Belli sagte in fstream .txt Datei nicht vorhanden!!:

    Wenn Du keinen Pfad angibst, sucht Dein Programm in dem Ordner, in dem die exe-Datei liegt (es sei denn, Du setzt explizit ein Working Directory).

    Es wird das Verzeichnis genommen, von dem aus das Programm gestartet wird.
    Man kann den Pfad mit angeben oder im Environment einen Suchpfad festlegen.

    Das ist bei Windows und/oder einer IDE (Entwicklungsumgebung) nicht immer das, was man meint.

    Du programmierst gerade Konsolenprogramme (schwarzes Textfenster), darum solltest du dich mal damit beschäftigen.



  • Wenn du nur den Dateinamen ohne Pfadangabe angibst, dann wird im aktuellen Verzeichnis (engl. "working directory") nach der Datei gesucht (d..h. die beiden Projektanwendungen haben unterschiedliche Verzeichnisse - und daher mein Vorschlag, ein Projekt für beides zu erzeugen).

    Du könntest den kompletten Pfad beim Lesen angeben:

    f.open("C:\\Cpp_Ordner\\Schreiben\\Schreiben\\Eingabe.txt", ios::in); // statt \\ kann man auch / angeben
    

    aber es ist selten eine gute Idee absolute Pfade im Code anzugeben (da dann das Programm nicht mehr portabel ist).

    Und noch ein paar Tipps:
    Für je Schreiben und Lesen gibt es spezialisierte fstream-Klassen: ofstream und ifstream.
    Und du kannst direkt schon beim Konstruktor den Dateinamen angeben:

    ifstream f("Eingabe.txt"); // außerdem kann ios::in hier entfallen, da dies der Standardwert beim ifstream ist
    

    Das explizite Schließen der Datei ist hier auch überflüssig, da beim Blockende diese geschlossen wird (Stichwort: RAII).



  • Über die fstream - Klassen: ofstream und ifstream habe ich schon gelesen!
    ifstream f("Eingabe.txt") ; Das kenne ich aus einem Youtube Tutorial.
    Ich muss dazu sagen das ich weder Schüler noch Student bin. Alles was ich bisher über C++ weis, habe ich mir
    selber beigebracht aus Interesse an der Sache!
    Das meiste über Bücher die ich durcharbeite und ausprobiere.
    Im Moment lese ich ein Buch wo es in dem jetzigen Kapital darum geht. (fstream) Der Code den ich oben gepostet habe, steht in dem Buch
    und laut des Autors soll es so funktionieren. (Screenshots sind im Buch abgedruckt)
    (Ich bin mir nicht sicher ob man Autor und Titel hier nennen darf)
    Ich habe es so aus dem Buch übernommen und was passiert ist habe ich ja schon geschildert 🙂



  • @FOKUS sagte in fstream .txt Datei nicht vorhanden!!:

    Danke erstmal für die Antworten und sorry wegen dem Formatieren. Ich bin noch nicht ganz vertraut mit den Gepflogenheiten des Forums!
    Werde versuchen es besser zu machen!

    Schreibe in eine Zeile vor Code ``` und in eine Zeile nach Deinem Code ```. Alternativ markiere Deinen Code und klicke auf das </> in der Symbolleiste über dem Textfeld.

    Du kannst Deine Beiträge auch noch nachträglich bearbeiten (bitte tu' das mit Deinem Eröffnungspost dieses Threamds). Den Menüpunkt "Bearbeiten" findest Du in dem Drei-Punkte-Menü rechts unter Deinen Beiträgen.


Log in to reply