从C ++ Visual 2006迁移到V2010 CFile到ifstream

时间:2015-09-03 07:28:43

标签: c++ c++11 migration

我想迁移一些用C ++ Visual 2006做的C ++ V2010编写的代码。 那是:

CFile *fInp;
...
int iStatus = fInp->Read(chMsg, iMaxBuffer);

现在我想尝试这样做:

ifstream *fInp;
...
int iStatus = fInp->read(chMsg, iMaxBuffer);

但CFile :: Read返回int,其值为已移动了多少个字符,但是ifstream :: read不是。 我怎样才能获得这个价值?

这会起作用吗?

fInp->read(chMsg, iMaxBuffer);
int iStatus = fInp->gcount();

...

2 个答案:

答案 0 :(得分:1)

阅读doc后,我的答案如下:

ifstream *fInp;
//...
fInp->read(buffer, iMaxBuffer);

if (*fInp)
    std::cout << "read " << iMaxBuffer << " characters successfully.";
else
    std::cout << "only " << fInp->gcount() << " could be read";

答案 1 :(得分:0)

CFile和ifstream完全不相关,不确定为什么要尝试用ifstream替换CFile。

你有没有理由不能使用CFile?它仍然适用于VS的更高版本。

编辑:

除了VB_overflow的答案之外,如果你觉得你真的需要一个iStatus变量而不是只用if来检查fInp,我想你可以做这样的事情。

int iStatus = fInp->failbit;

如果确实如此,则表示它没有失败。我想我更喜欢做一个if(fInp)。