Mam, prawdopodobnie banalne pytanie, ale nie mogę tego zrozumieć. ja napisałem prosty kod:VS8 nie może obsłużyć file.close(); file.open() ;, dlaczego?
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();
}
świeżym projektem VS8 w C++ Express. Kiedy go uruchomię, a "dane" nie istnieje, tworzy plik, ale zwraca także "niedobry" (drugi), więc dane wyjściowe nie są zapisywane w pliku. A teraz nadchodzi zabawna rzecz. Jeśli skompiluję ten sam kod w VS10 C++ Express i Code :: Blocks 12, to działa dobrze.
Dlaczego tak jest?
@edit Mój przyjaciel sprawdził to na swoim komputerze z VS8 C++ Expres też. Działa to samo dla niego.
@ Edit2 samo jak mój komentarz z "roztwór":
Zmuszanie wyczyścić failbit z .clear(); metoda wydaje się działać. To boli , gdy uczysz się w nowszym IDE, a następnie musisz przejść na starszy: /. Tho, daje mi to lekcję. Dzięki chłopaki.
Różne kompilatory czasami mają różne implementacje standardu. Zwłaszcza kompilatory Microsoft ... – Appleshell
Możesz użyć 'is_open' zamiast' good'. –
Być może błąd nie został wyczyszczony po pierwszej awarii. Wygląda na to, że "open" usuwa teraz błąd po sukcesie w C++ 11 i być może ta zmiana została dokonana w VS2010 w oczekiwaniu na niektóre z nowych standardowych funkcji (kliknij na zakładki, które pokazują różnice między C++ 03 i C + +11 http://www.cplusplus.com/reference/fstream/fstream/open/) – statueuphemism