2013-10-06 94 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();