Datei auslesen, wo ist der Fehler im Quellcode?
-
Hallo,
ich möchte am Anfang meiner Überlegungen eine simple textdatei öffnen, deren Inhalt auslesen und ihn in der Konsole wieder ausgeben.
Leider wird mit meinem Quellcode überhaupt nichts ausgegeben. Kann mir jemand verraten wo der Fehler und wieso das hier nicht funktioniert?
#include <fstream> #include <iostream> #include <string> using namespace std; int main() { ifstream f; string s; f.open("Dateiname", ios::in); getline(f, s); cout << s << endl; f.close(); cin.get(); }
-
Vielleicht kann
"Dateiname"nicht geöffnet werden? Btw: Warum die sinnlose Einrückung?
-
Dateiname = Dateipfad, also die Datei existiert
-
Und?
is_open()?
-
Deine Programm gibt nur die erste Zeile aus. Ist diese in deiner Datei leer?
-
Ich nehme an die Datei wird im Hintergrund geöffnet.
Nein die erste Zeile der Datei ist beschrieben
-
Erfahrung lehrt uns: Es ist bei dieser Art Frage immer der Dateiname falsch und die Datei wird gar nicht geöffnet. So lange du uns nicht ein Programm zeigst, in dem is_open() wahr ist und trotzdem nichts ausgegeben wird, verbleibe ich dabei, dort die Schuld zu vermuten.
-
Schau dir das hier doch mal an:
Hier
Unter dem Punkt oder auch alles^^
Datei-Verbindung mit Eingabestream-Objekt aufheben
-
Stutzpeter schrieb:
Dateiname = Dateipfad, also die Datei existiert
Vielleicht existiert sie in einem anderen Verzeichnis oder heißt Dateiname.txt und Du siehst die Extension nicht.
Versuche das:
#include <fstream> #include <iostream> #include <string> using namespace std; int main() { ifstream f; string s; f.open("Dateiname"/*, ios::in*/); // ios::in ist unnötig, da ein (i)fstream immer 'in' ist if( !f.is_open() ) { cerr << "Konnte Datei nicht oeffnen!" << endl; return -2; } if( getline(f, s) ) cout << s << endl; else cerr << "Lesefehler bei getline(f, s)" << endl; // f.close(); // unnötig, wird mit Scope-Ende sicher geschlossen cin.get(); }Gruß
Werner
-
SeppJ schrieb:
Erfahrung lehrt uns: Es ist bei dieser Art Frage immer der Dateiname falsch und die Datei wird gar nicht geöffnet. So lange du uns nicht ein Programm zeigst, in dem is_open() wahr ist und trotzdem nichts ausgegeben wird, verbleibe ich dabei, dort die Schuld zu vermuten.
ich hab den kompletten Pfad in den Eigenschaften der Textdatei kopiert...
in folgendem Quellcode schreibt er was in die gleiche Datei rein, das funktioniert, nur auslesen nicht...
fstream f;
f.open("Dateiname", ios::out);
f << "" << endl;
f.close();
-
Bau doch einmal die Fehler abfrage ein. So weißt du sicher das er die Datei öffnet.
-
Stutzpeter schrieb:
Nein die erste Zeile der Datei ist beschrieben
Nein - nicht mehr nach diesem Code:
Stutzpeter schrieb:
in folgendem Quellcode schreibt er was in die gleiche Datei rein, das funktioniert, nur auslesen nicht...
fstream f;
f.open("Dateiname", ios::out);
f << "" << endl;
f.close();.. dann ist die erste Zeile leer
-
Danke Werner,
die Datei wird tatsächlich nicht geöffnet, aber nicht nur die, sondern keine txt-Datei wird geöffnet, hab jetzt schon 5 Dateien versucht zu öffnen.
wie gesagt mit dem letzten Quellcode den ich eben gepostet hab, mit dem ich in die Dateien hinein schreibe, klappt es...
-
Werner Salomon schrieb:
Stutzpeter schrieb:
Nein die erste Zeile der Datei ist beschrieben
Nein - nicht mehr nach diesem Code:
Stutzpeter schrieb:
in folgendem Quellcode schreibt er was in die gleiche Datei rein, das funktioniert, nur auslesen nicht...
fstream f;
f.open("Dateiname", ios::out);
f << "" << endl;
f.close();.. dann ist die erste Zeile leer
Nein, das hat doch mit meinem eigentlichen Programm überhaupt nichts zu tun, da kommt dieser Quellcode nicht drin vor. Das war nur ein Beispiel, dass es nicht an dem Pfad der Datei liegen kann...
-
Stutzpeter schrieb:
Nein, das hat doch mit meinem eigentlichen Programm überhaupt nichts zu tun, da kommt dieser Quellcode nicht drin vor. Das war nur ein Beispiel, dass es nicht an dem Pfad der Datei liegen kann...
Naja anscheind doch?^^
-
Enno schrieb:
Stutzpeter schrieb:
Nein, das hat doch mit meinem eigentlichen Programm überhaupt nichts zu tun, da kommt dieser Quellcode nicht drin vor. Das war nur ein Beispiel, dass es nicht an dem Pfad der Datei liegen kann...
Naja anscheind doch?^^
naja anscheinend doch nicht?!
Fehler gefunden und behoben:
falscher Dateiname: D:\Users\User\Eigene Dokumente\Charaktere.txtrichtiger Dateiname: D:/Users/User/Eigene Dokumente/Charaktere.txt
-
Stutzpeter schrieb:
Das war nur ein Beispiel, dass es nicht an dem Pfad der Datei liegen kann...
Hab mich dadrauf bezogen. Lag ja nun doch am Pfad.^^
-
Der \ ist das Escapesymbol und leitet die Escapesequenzen ein. Dazu gehören z.B. \n, \t \" oder \'
Wenn du ein \ haben willst, musst du diesen doppelt angeben.D:\\Users\\User\\Eigene Dokumente\\Charaktere.txtDas sind Grundlagen.
-
Hätte ich gleich den Pfad angegeben, wäre das Problem wohl direkt gelöst worden...
Danke an alle!
-
Enno schrieb:
Schau dir das hier doch mal an:
Hier
Unter dem Punkt oder auch alles^^
Datei-Verbindung mit Eingabestream-Objekt aufhebenVorsicht bei diesem "C++-Kurs". Ich habe die Kapitel, die Datei-IO betreffen, mal kurz überflogen, das strotzt vor Fehlern und Unsauberkeiten.
Es enthält die typischen Anfängerfehler, vor denen hier im Forum immer wieder gewarnt wird.Gruß
Werner