Ich habe, wahrscheinlich triviale Frage, aber ich kann es nicht verstehen. Ich habe schrieb den einfachen Code:VS8 kann nicht mit file.close(); file.open(); warum?
fstream file;
file.open("data", ios::in);
if(!file.good()){
file.close();
file.open("data", ios::out);
if(!file.good()) cout<<"not good"<<endl;
file<<"test"<<endl;
file.close();
}
in frischem VS8 C++ Express-Projekt. Wenn ich es ausführe und "Daten" nicht existieren, erzeugt es eine Datei, gibt aber auch "nicht gut" (die zweite) zurück, so dass die Ausgabe nicht in die Datei geschrieben wird. Und jetzt kommt die lustige Sache. Wenn ich denselben Code in VS10 C++ Express und Code :: Blocks 12 kompiliere, funktioniert es gut.
Warum ist es so?
@edit Mein Freund überprüft es auf seinem PC mit VS8 C++ Expres auch. Funktioniert für ihn gleich.
@ edit2 Gleiche wie mein Kommentar mit "Lösung":
Erzwingen löschen failbit mit .clear(); Methode scheint zu funktionieren. Es tut weh , wenn Sie in neueren IDE lernen und dann zu älterem wechseln müssen: /. Tho, es gibt eine schöne Lektion. Danke Leute.
Verschiedene Compiler haben manchmal unterschiedliche Implementierungen des Standards. Vor allem Microsoft Compiler ... – Appleshell
Sie können 'is_open' anstelle von' good' verwenden. –
Vielleicht wird das Failbit nach dem ersten Fehler nicht gelöscht. Es sieht so aus, als ob "open" jetzt das Failbit bei Erfolg in C++ 11 löscht und vielleicht wurde diese Änderung in VS2010 in Erwartung einiger der neuen Standardfunktionen gemacht (klicken Sie auf die Registerkarten, die Unterschiede zwischen C++ 03 und C + zeigen +11 http://www.cplusplus.com/reference/fstream/fstream/open/) – statueuphemism