我有一个具有std :: istream参数的函数,并在其上使用成员函数read()和eof()。有人可能会传入子流ifstream,ofstream,fstream等,我不知道它是否处于二进制模式。我的问题:
有没有办法确定istream是ifstream,ofstream,fstream等,并且已经以二进制模式打开了?
read()或eof()在istream上是否有任何差异,具体取决于子类?假设在文本模式下的ifstream是参数,如果我在二进制或文本模式下调用istream read()和eof(),这是否由标准覆盖?
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
int main( int argc, char *argv[] )
{
ofstream out("test", ios::trunc|ios::binary);
char a[] = "before \x1a after";
out.write( a, (sizeof a) - 1);
out.close();
ifstream in("test");
char buffer[(sizeof a) - 1];
// read one less than the actual file size
in.istream::read(buffer, (sizeof buffer) - 1);
buffer[in.gcount()]=0;
cout << "gcount: " << in.gcount() << endl;
cout << "eof: " << in.istream::eof() << endl;
cout << buffer << endl;
return 0;
}