2013-10-06 105 views
0

我讀完std::fstream後使用read方法我不能seekg開始(tellg返回-1)。有沒有辦法重用std::fstream而不關閉並重新打開它?C++ - 重複使用std :: fstream

if (!stream->is_open();) 
{ 
    throw "stream is closed"; 
} 
stream->seekg(0, stream->end); 
std::fstream::pos_type lenght = stream->tellg(); 
stream->seekg(0, stream->beg); 

if (0 != stream->tellg()) 
{ 
    throw "could not set seek to beginig"; 
} 

char* buffer = new char[lenght]; 


stream->read(buffer, lenght); 

*data = buffer; 
return lenght; 

1st run returns ok。 第二次投擲(無法尋找)。

回答

2

一旦數據流進入故障模式(即,設置了std::ios_base::failbit),它將不會執行任何有用的操作,直到該標誌爲clear() ed。這可能足以使用

stream->clear();