我有,可能微不足道的問題,但我無法理解它。 我已經寫了簡單的代碼:VS8無法處理file.close(); file.open(),爲什麼?
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();
}
新鮮VS8 C++快車項目。當我運行它並且「數據」不存在時,它創建文件,但也返回「不好」(第二個),所以輸出不會寫入文件中。現在來了有趣的事情。如果我在VS10 C++ Express和Code :: Blocks 12中編譯相同的代碼,它工作正常。
這是爲什麼?
@edit 我的朋友在他的PC上用VS8 C++ Expres也檢查過它。爲他工作。
@ EDIT2同用 「解決方案」 我的評論:
強制清除failbit與.clear();方法似乎工作。當你在較新的IDE中學習並且必須切換到較舊的IDE時,它會傷害 :/。 Th,它給了很好的教訓。多謝你們。
不同的編譯器有時會有不同的標準實現。尤其是微軟編譯器... – Appleshell
你可以使用'is_open'而不是'good'。 –
也許故障位在第一次故障後沒有被清除。看起來像「open」現在清除了C++ 11成功時的失敗位,也許這個變化是在VS2010中進行的,因爲它預見到了一些新的標準功能(點擊顯示C++ 03和C + +11 http://www.cplusplus.com/reference/fstream/fstream/open/) – statueuphemism