剛剛在VS2010裡面使用vc6.0的那種#include <fstream.h>方式,但是編譯時提示fatal error C1083: 無法打開包括檔案:“fstream.h”: No such file or directory。
查閱了相關資料後,找到解決方法:
把
#include <fstream.h>
改成
#include <fstream>
using namespace std;
編譯、運作都順利通過了~~~
為什麼會這樣子呢?
因為:
從 Visual C++ .NET 2003 開始,移除了舊的 iostream 庫。
标準 C++ 庫和以前的運作時庫之間的主要差異在于 iostream 庫。iostream 實作的
具體細節已經更改,如果想連結标準 C++ 庫,可能有必要重寫代碼中使用 iostream
的部分。
必須移除任何包含在代碼中的舊 iostream 頭檔案(fstream.h、iomanip.h、ios.h
、iostream.h、istream.h、ostream.h、streamb.h 和 strstrea.h),并添加一個
或多個新的标準 C++ iostream 頭檔案(<fstream>、<iomanip>、<ios>、<iosfwd>
、<iostream>、<istream>、<ostream>、<sstream>、<streambuf> 和 <strstream>
,所有頭檔案都沒有 .h 擴充名)。
在新的标準 C++ iostream 庫中:
1. open 函數不采用第三個參數(保護參數)。
2. 無法從檔案句柄建立流。
3. 除了幾個例外,新的标準 C++ 庫中的所有名稱都在 std 命名空間中。有關更多資訊,請參見使用 C++ 庫頭。
4. 單獨用 ios::out 标志無法打開 ofstream 對象。ios::out 标志必須在邏輯 OR 中和另一個 ios 枚舉數組合;比如,和 ios::in 或 ios::app 組合。
5. 因為設定了 eofbit 狀态,到達檔案尾後 ios::good 不再傳回非零值。 除非知道目前沒有設定基标志,否則 ios::setf(_IFlags)
不應和 ios::dec、ios::oct 或 ios::hex 的标志值一起使用。格式化的輸入/輸出函數和運算符假定隻設定了一個基。改用 ios_base。
更多改動的地方請查閱MSDN~
除了上述改動外,以下作為舊 iostream 庫元素的函數、常數和枚舉數不是新 iostream
庫的元素:
filebuf、fstream ifstream 和 ofstream 的 attach 成員函數
filebuf、fstream ifstream 和 ofstream 的 fd 成員函數
filebuf::openprot
filebuf::setmode
ios::bitalloc
ios::nocreate
ios::noreplace
ios::sync_with_stdio
streambuf::out_waiting
streambuf::setbuf(相同的行為使用 rdbuf -> pubsetbuf)
