Auslesen eines Streams aus einer Datei
-
Hey Leute,
habe folgendes Problem, habe ein Programm geschrieben, mit Hilfe eines Tutorials, welches zuerst eine vorhandene Datei öffnet und ausgibt, bzw falls noch nicht vorhanden eine neue Datei anlegt.
Danach kann man einen Text eingeben der an die Datei angehängt wird.
So das macht mein Programm auch noch.
Jedoch soll danach das Programm die Datei wieder öffnen und ausgeben, doch es funktioniert einfach nicht.
Finde den Fehler nicht:(
Vll könnt ihr mir helfen.Danke schonmal=)
#include <fstream> #include <iostream> using namespace std; int main() { char fileName[150]; char buffer[255]; cout << "Bitte Dateiname eingeben: "; cin >> fileName; ifstream fin(fileName); if(fin.good()) { cout << "Aktueller Dateiinhalt:\n"; char ch; while(fin.get(ch)) cout << ch; cout << "***Ende des Dateiinhaltes***\n"; } fin.close(); cout << "Die Datei " << fileName << " im Anhaengemodus oeffnen!\n"; ofstream fout(fileName, fstream::app); if(fout.fail()) { cout << "Es ist nicht moeglich die Datei " << fileName << " im Anhaengemodus zu oeffnen!\n"; return (1); } cout << "Bitte Daten eingeben, die in die Datei geschrieben werden sollen: "; cin.ignore(1, '\n'); cin.getline(buffer, 255); fout << buffer << "\n"; fout.close(); fin.open(fileName); if(fin.fail()) { cout << "Es ist nicht moeglich die Datei " << fileName << " zum Lesen zu oeffnen!\n"; return (1); } cout << "So lautet der Dateiinhalt:\n"; char ch; while(fin.get(ch)) cout << ch; cout << "***Ende des Dateiinhaltes***\n"; fin.close(); return 0; }
-
Funktioniert ganz ausgezeichnet. Kannst du dein Problem näher beschreiben?
P.S.: Das Einlesen in fest begrenzte char-Arrays ist gefährlich. Was, wenn die Eingabe länger ist als das Array? Nimm lieber std::string.
-
ok erstma danke für den tipp mit dem string, aber wollt erst mal das prinzip bissel verstehen mit ein und auslesen von daten;-)
also ich hab ja den teil eingebaut wo er fals fin.fail() true ist sagt, datei kann nicht zum lesen geöffnet werden, und genau dass kommt bei mir immer??
verstehe nicht warum???
-
wie wärs mit
if (!fin.good()) // oder if (!fin) // oder if (fin.bad()) // bin mir nicht sicher ob das stimmtEDIT: Das kanns aber auch nicht sein. hmmm
-
macht auch kein unterschied ob !fin oder !fin.good().
er meldet mir immer die fehlermeldung...???
-
Steht in der Datei denn am ende wenigstens drin was man eingegeben hat ?
-
Das Programm an sich ist richtig. Prüf mal nach, ob und wo die Datei beim Schreiben erstellt wird.
-
Sie wird in dem ordner erstellt wo auch die ganzen dateien sind, also main.cpp zum beispiel.
das komische ist ja er hängt ja auch das an die datei was ich eingeb blos dann kommt eben die meldung konnte die datei zum lesen nicht öffnen. starte ich dann das programm von vorne, hat er das was ich zuvor eingeben hab angehängt, aber er öffnet sie eben nicht nachdem ich was eingeben habe, so wie das prog es eg soll:(
-
Mach doch mal vor das
fin.open(fileName)einfin.clear(). Ich wette das EOF Flag ist gesetzt und beim erneuten öffnen, wird es nicht zurückgesetzt.
Alternativ: Verwende immer ein neuesistream/ostreamObjekt. So bist du immer auf der sicheren Seite, dass das Objekt in einem funktionierenden Zustand ist.Grüssli
-
Mit fin.clear() geht es:D
was bewirkt den fin.clear()???
danke auf jeden fall schonmal für eure hilfe;-)
-
fr33g schrieb:
was bewirkt den fin.clear()???
Es setzt das Fehler-Flag auf
goodbitzurück, also das keine Fehler vorliegen:
http://www.cplusplus.com/reference/iostream/ios/clear/Grüssli
-
asoo ok dankeschön;-)
-
Gibt es eigentlich einen plausiblen Grund, warum bei einem
open-Aufruf die Flags nicht zurückgesetzt werden? Dass hier EOF bestehenbleibt, finde ich nicht sonderlich sinnvoll
-
Ich weiß es zwar auch nicht, aber anscheinend ist das EOF ja bei den anderen nicht stehen geblieben, denn bei ihnen lief der code ja...
naja ich machs halt jetzt immer mit clear oder ein neues objekt.