天天看點

vs++2010 編譯說找不到 fstream.h 解決方法 - 貓少俠

剛剛在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)

vs++2010 編譯說找不到 fstream.h 解決方法 - 貓少俠