C++ XPErt
-
Wieso erstellt mein Code die Datei nur, aber beschreibt sie nicht? Der IF_Zweig wird laut einer Test-cout-Ausgabe ausgeführt, trotzdem ignoriert er <<!
string tasmPath; fstream stream1; FILE *cFile; cFile = fopen("TASMToolKit.ini", "r"); if(cFile == NULL) cFile = fopen("TASMToolKit.ini", "w"); fclose(cFile); stream1.open("TASMToolKit.ini", ios::in | ios::out); if(!stream1.is_open()) { cerr << "\aFEHLER:\tKonnte INI-Datei nicht öffnen!\n"; cout << "Druecken Sie irgendeine Taste!"; getch(); exit(1); } stream1 >> tasmPath; if(tasmPath.empty()) { TASMPath = GetTasmPath(); stream1 << "Dummy"; // DAS PASSIERT NICHT!!! } else TASMPath = tasmPath; stream1.close();
-
Hoppla, Titel mit Name vertauscht, kann man das mal ändern?

-
Wenn bei Zeile 14 ein Fehler passiert, geht der Stream in einen Fehlerzustand und aktzeptiert weder Eingaben noch Ausgaben. Somit funktioniert dann auch Zeile 17 nicht mehr.
Einen Stream kannst du entweder direkt auf Gültigkeit prüfen, also so:
if(stream1) { // ist gültig. }http://www.cplusplus.com/reference/iostream/ios/operator_voidpt/
http://www.cplusplus.com/reference/iostream/ios/operatornot/Oder du kannst die Methode
goodverwenden:if(stream1.good()) { // alles i.o. }http://www.cplusplus.com/reference/iostream/ios/good/
Um den Fehlerzustand des Streams zurückzusetzen, kannst du die Methode
clearverwenden:
http://www.cplusplus.com/reference/iostream/ios/clear/Grüssli
-
Danke, clear() klappt wunderbar! Aber wieso ist der Stream denn ungültig? Ich habe davor ein ios::out gehabt, macht das den Stream für ios::in auf einmal ungültig?

-
C++ XPErt schrieb:
Danke, clear() klappt wunderbar! Aber wieso ist der Stream denn ungültig? Ich habe davor ein ios::out gehabt, macht das den Stream für ios::in auf einmal ungültig?

Wenn das File leer ist und du willst daraus lesen, ist dies natürlich ein Fehler und das
eofbitFlag wird gesetzt.Grüssli
-
Okay danke!