ifstream Datei wird nicht geöffnet



  • Hallo,
    bin gerade bei einer Übungsaufgabe zum Thema "Öffnen von Dateien". Habe eine Datei "dataoutput" erstellt. Diese soll geöffnet werden. Allerdings liefert "read_file.is_open()" immer false. Die Datei befindet sich im selben Verzeichnis wie die -".cpp"-Datei. Hier der Code:

    #include <iostream>
    #include <fstream>
    
    int main(int argc, char* argv[])
    {
    	std::ifstream read_file("dataoutput");
    	if (!read_file.is_open())
    	{
    		return 1;
    	}
    	int number_of_rows = 0;
    	while (!read_file.eof())
    	{
    		double dummy1, dummy2, dummy3, dummy4;
    		read_file >> dummy1 >> dummy2;
    		read_file >> dummy3 >> dummy4;
    		number_of_rows++;
    	}
    	std::cout << "Number of rows = " << number_of_rows << "\n";
    	read_file.close();
    	return 0;
    }
    

    Im Quelltext ist übrigens noch ein Fehler versteckt, den man suchen soll. Also bitte noch nicht verraten. 🙂



  • Die Datei muss sich im selben verzeichnis befinden in dem sich auch das übersetzte programm befindet



  • Ich finde die ".exe"-Datei nicht in dem Ordner, in dem sie sein sollte...


  • Mod

    Die Antwort ist auch nicht ganz richtig. Die Datei muss sich im aktuellen Arbeitsverzeichnis befinden, das ist meist das Verzeichnis von wo aus du dein Programm startest. Falls du dein Programm aus einer IDE startest, ist natürlich nicht so unmittelbar klar, wo das ist. Das wird in den Ausführungs- und/oder Projekteinstellungen konfiguriert sein. Ein typischer Standardwert wäre das Hauptverzeichnis des Projekts.



  • Zur Vereinfachung könnte man hier ja auch mal einen absoluten Pfad angeben. Für ein Testprogramm reicht das ja.



  • Habe jetzt den kompletten Dateipfad angegeben. Es funktioniert allerdings immer noch nicht.



  • @H-P-Wurst Du könntest deinen Code mal zeigen, aber hast du an die Escape-Sequenzen gedacht?

    "d:\Test\datei.bin"
    
    ->
    
    "d:\\Test\\datei.bin"
    
    

    Der Compiler sollte aber eigentlich warnen.



  • Hier der aktuelle Code:

    #include <iostream>
    #include <fstream>
    
    int main(int argc, char* argv[])
    {
    	std::ifstream read_file("C:\\Users\\p_boc\\Desktop\\Visual Studio\\Scientific Computation in C++\\Ex3_8\\Ex3_8\\dataoutput");
    	if (!read_file.is_open())
    	{ 
    		return 1;
    	}
    	int number_of_rows = 0;
    	while (!read_file.eof())
    	{
    		double dummy1, dummy2, dummy3, dummy4;
    		read_file >> dummy1 >> dummy2;
    		read_file >> dummy3 >> dummy4;
    		number_of_rows++;
    	}
    	std::cout << "Number of rows = " << number_of_rows << "\n";
    	read_file.close();
    	return 0;
    }
    


  • @H-P-Wurst sagte in ifstream Datei wird nicht geöffnet:

    std::ifstream read_file("C:\Users\p_boc\Desktop\Visual Studio\Scientific Computation in C++\Ex3_8\Ex3_8\dataoutput");

    Erster Schritt wäre mal, den Fehler auszugeben. Bau mal ein
    std::cout << strerror(errno) << '\n';
    vor das "return 1" ein.

    Bist du dir im klaren, dass du "Ex3_8" doppelt im Pfad hast? Ich würde raten, dass das vielleicht nicht stimmt.

    Anderer Fehler im Programm ist Zeile 12: while(!file.eof()) ist nicht etwas, das man das in C++ sinnvollerweise macht. (ich wette, dass das nicht der Punkt ist, den du finden sollst)



  • @wob sagte in ifstream Datei wird nicht geöffnet:

    Erster Schritt wäre mal, den Fehler auszugeben. Bau mal ein
    std::cout << strerror(errno) << '\n';
    vor das "return 1" ein.

    Fehlermeldung: No such file or directory.

    @wob sagte in ifstream Datei wird nicht geöffnet:

    Bist du dir im klaren, dass du "Ex3_8" doppelt im Pfad hast? Ich würde raten, dass das vielleicht nicht stimmt.

    Dateipfad ist so richtig. Habe die Datei jetzt auch extra in das Verzeichnis mit der ".exe"-Datei gelegt (nachdem ich es gefunden habe).



  • @H-P-Wurst sagte in ifstream Datei wird nicht geöffnet:

    Dateipfad ist so richtig. Habe die Datei jetzt auch extra in das Verzeichnis mit der ".exe"-Datei gelegt (nachdem ich es gefunden habe).

    Das ist bei vollem Pfad irrelevant - und bei relativem Pfad bezieht sich dieser auf das aktuelle Arbeitsverzeichnis, welches nicht das gleiche wie das der exe-Datei sein muss (wie auch schon @SeppJ sagte).

    Sonst öffne mal ein cmd.exe und versuche der Reihe nach folgende Kommandos:

    type "C:\Users\p_boc\Desktop\Visual Studio\Scientific Computation in C++\Ex3_8\Ex3_8\dataoutput"
    dir "C:\Users\p_boc\Desktop\Visual Studio\Scientific Computation in C++\Ex3_8\Ex3_8\dataoutput"
    dir "C:\Users\p_boc\Desktop\Visual Studio\Scientific Computation in C++\Ex3_8\Ex3_8"
    dir "C:\Users\p_boc\Desktop\Visual Studio\Scientific Computation in C++\Ex3_8"
    dir "C:\Users\p_boc\Desktop\Visual Studio\Scientific Computation in C++"
    dir "C:\Users\p_boc\Desktop\Visual Studio"
    dir "C:\Users\p_boc\Desktop"
    

    dann sollte ja auffallen, ab wo es funktioniert.

    Ansonsten: Zugriffsrechte auf die Datei hast du auch?



  • Hast du "show extensions for known file types" im Explorer aktiviert? Kann es vielleicht sein dass dein File in Wirklichkeit "dataoutput.txt" heisst?



  • Die Dateipfade lassen sich finden. Die Datei allerdings nicht. Rechte habe ich eigentlich auch (ist zumindest nicht schreibgeschützt und ich habe vollen Zugriff).



  • @H-P-Wurst sagte in ifstream Datei wird nicht geöffnet:

    Habe eine Datei "dataoutput" erstellt.

    Mit dem Windows-Explorer? Hat die Datei keine Endung(z.B. ".txt")?
    Läßt du dir die Datei-Endungen nicht anzeigen (unter Optionen)? Das ist das erste, was ich umstelle, nachdem ich Windows installiert habe.



  • @hustbaer sagte in ifstream Datei wird nicht geöffnet:

    Hast du "show extensions for known file types" im Explorer aktiviert? Kann es vielleicht sein dass dein File in Wirklichkeit "dataoutput.txt" heisst?

    Fehler gefunden. Ich habe die Dateiendung nicht angefügt.
    Vielen Dank!



  • @Th69 sagte in ifstream Datei wird nicht geöffnet:

    Läßt du dir die Datei-Endungen nicht anzeigen (unter Optionen)? Das ist das erste, was ich umstelle, nachdem ich Windows installiert habe.

    Ich auch. Ich finde es auch krass dass Explorer hier immer noch keine gute Lösung für den Sicherheitsaspekt dieser Sache hat. Ausführbare Programme mit Word oder PDF Icon und so. Von daher finde ich die Standardeinstellung ziemlich ungünstig, auch wenn man davon ausgeht dass sie für Klickibunit User gedacht ist.



  • @hustbaer sagte in ifstream Datei wird nicht geöffnet:

    @Th69 sagte in ifstream Datei wird nicht geöffnet:

    Läßt du dir die Datei-Endungen nicht anzeigen (unter Optionen)? Das ist das erste, was ich umstelle, nachdem ich Windows installiert habe.

    Ich auch. Ich finde es auch krass dass Explorer hier immer noch keine gute Lösung für den Sicherheitsaspekt dieser Sache hat. Ausführbare Programme mit Word oder PDF Icon und so. Von daher finde ich die Standardeinstellung ziemlich ungünstig, auch wenn man davon ausgeht dass sie für Klickibunit User gedacht ist.

    Ich finde es auch furchtbar und habe, wenn ich Windows mal nutze, das auch immer als erstes umgeschaltet. Aber dann hatte ich das mal bei meinem Vater gesehen (wo ich das auch umgestellt hatte, großer Fehler!). Denn beim Umbenennen hat er dann auch die Erweiterung entfernt - gehört ja nicht zum Namen... Und dann konnte er auf einmal die Dateien nicht mehr öffnen, weil sie nicht mehr da waren (im "Datei->Öffnen"-Dialog somit nicht angezeigt werden) Also: inzwischen habe ich Verständnis für die Default-Einstellung, auch wenn ich selbst damit überhaupt nicht klarkomme.



  • Vielleicht liegt es auch den Verzeichnisnamen mit Leerzeichen drin. Windows hatte da ja schon immer mal das eine oder andere Problemchen.



  • @It0101 lol

    1. Nein. Windows hatte mit Leerzeichen im Dateinamen noch nie ein Problem. Also zumindest kein solches. Batch files etc. sind was anderes, aber da haben POSIX Systeme ebenso "Probleme" (=man muss halt escapen oder quoten, gilt für beide Plattformen).
    2. @H-P-Wurst hat ja schon bestätigt dass es die fehlende Extension war.