ifstream: öffnen nicht erfolgreich



  • Hallo alle zusammen,

    ich versuche im Moment, ein kleines Programm zu schreiben, welches Wort für Wort aus einer Datei auslesen soll. Die Dateien sind von mir selbst erstellt worden, also weiß ich, was drinsteht und was das Programm ausgeben soll.
    Wäre ja alles schön und gut, wenns funktionieren würde, aber wenn ich das alles compiliere, gibts keine Fehlermeldung ( ⚠ ) aber meine Datei kann auch nicht geöffnet werden. Jedes mal, wenn ich versuche, die Datei zu öffnen, sagt mir mein Programm, dass es nicht funktioniert hat.
    So sieht übrigens mein Code aus:

    #include <string>
    #include <fstream>
    #include <iostream>
    
    using namespace std;
    
    void Load()
    {
        string buffer;
        ifstream myFile;
        myFile.open("savedData.dat",ios::in);
        if(!myFile.good())
        {
            printf("Open failed\n");
            return;
        }
        printf("Success\n");
    }
    
    int main()
    {
        Load();
        return 0;
    }
    

    Bevor ihr mich jetzt irgendwo hinverweist muss ich noch sagen, dass ich schon ne ganze weile danach gesucht hab, auch die Anweisungen der Ratgeber befolgt hab, aber immernoch kein Erfolg hatte. 😞

    Woran kann das liegen, dass das nicht funktioniert? Eigentlich ist doch soweit alles richtig, der Compiler beschwert sich ja nicht... 😕

    Danke für eure Hilfe im Vorraus,

    Felix



  • Und die Datei liegt im selben Ordner wie dein compiliertes Programm?



  • Ziemlich sicher liegt es daran, dass die Datei nicht dort liegt, wo das Programm sie erwartet (z.B. relativ zum aktuellen Working Directory).

    Versuche mal den Pfad absolut anzugeben. Wenn das Klappt, kannst Du wieder mit relativen PFaden versuchen die Datei zu öffnen.



  • Da ist auch kein Fehler im Quellcode. Ergo ist das Programm nicht im selben Verzeichnis wie die Datei. printf ist aber nicht gerade guter C++-Stil, schau dir mal "Streams" an, google das mal.
    Edit: Und ifsteam::open() braucht's auch nicht, kannst gleich den Konstruktor benutzen:

    std::ifstream datei("daten.txt");
    

    Edit 2: Achja, das ios::in da ist auch überflüssig - wie der name schon sagt öffnet man mit std::ifstream eine Datei nur zum Lesen, mit ofstream nur zum Schreiben. Diese zusätzliche Angaben kannste machen wenn du nix davon benutzt und einfach nur std::fstream benutzt (wenn du zum Beispiel beides, also Lesen und Schreiben willst).



  • Ok das mit dem absoluten Pfad hat fuktioniert, danke!
    Alles funktioniert, aber eine frage ist noch offen:
    Ist bei den relativen Pfaden die Quelldatei oder das .exe-Programm, welches beim Compilieren erstellt wird, der Ausgangspunkt?



  • Ottifant97 schrieb:

    Ist bei den relativen Pfaden die Quelldatei oder das .exe-Programm, welches beim Compilieren erstellt wird, der Ausgangspunkt?

    Entscheidend ist das Arbeitsverzeichnis. Das kann im Prinzip jedes Verzeichnis sein. Wenn du das Programm aus der IDE heraus startest, müsste es aber bestimmte Konventionen geben. Beim MSVC ist es IIRC so, dass das Projektverzeichnis als Arbeitsverzeichnis gesetzt wird.


Anmelden zum Antworten