C ++ istream是read()总是二进制?

时间:2014-03-08 07:39:14

标签: c++ ifstream eof istream

我有一个具有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;
}

0 个答案:

没有答案