2014-03-07 70 views
1

我正在將版本2005的Visual Studio解決方案移植到版本2010.ifstream _Read_s怎麼了?

其中一個項目是使用ifstream的本地C++項目。

轉換過程成功完成,但是當我嘗試構建本地項目時,編譯器說「_Read_s不是ifstream的成員」。

_Read_s發生了什麼?

有編譯器的變化,使方法不能訪問?

這是Visual Studio 2005中建立正確的代碼:

ifstream binfile(pathFileToRead, ios::in | ios::binary | ios::beg); 

while (!binfile.eof()) 
{ 
    binfile._Read_s(fileBuffer, CACHE_SIZE, CACHE_SIZE); 

    //Do something with fileBuffer 
} 
+0

什麼是'_Read_s'?我從來沒有見過。什麼是生成錯誤的代碼? –

+0

據我所知_Read_s是Read的一種更安全的版本,微軟添加到它的STL實現中......我將添加一個代碼示例 – sblandin

+2

另外,'while(!eof())'幾乎總是一個bug C/C++。 –

回答

2

它看起來像非標準basic_istream::_Read_s()只在VS 2005中存在和VS 2008

您應該更改它以使用標準的basic_istream::read()功能:

binfile.read(fileBuffer, CACHE_SIZE); 
+0

也感謝eof上的提示。更安全的實施看起來是個好主意,但它沒有經過許多版本;-)。 – sblandin

+0

這個特別安全的功能似乎對標準功能提供的安全性很低。我認爲這是消除它的一個因素。 –

+0

[basic_istream :: _ Read_s是undefined | Microsoft Connect](http://connect.microsoft.com/VisualStudio/feedbackdetail/view/533292/basic-istream-read-s-is-undefined) – user34660