从c++ Visual 2006到V2010的迁移

Migration from C++ Visual 2006 to V2010 CFile to ifstream

本文关键字:V2010 迁移 2006 c++ Visual      更新时间:2023-10-16

我想迁移一些用c++ Visual 2006编写的代码到c++ V2010。这是:

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

,现在我试着这样做:

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

but CFile::Read返回int,表示移动了多少个字符,但是ifstream:: Read没有。我怎样才能得到这个值?

这个可以吗?

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

? ?

看完文档后,我的回答如下:

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

CFile和ifstream并不是真正相关的,不知道为什么你要用ifstream代替CFile。

是否有不能使用CFile的原因?它应该仍然可以使用更高版本的VS.

编辑:

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

int iStatus = fInp->failbit;

如果它为真,就意味着它没有失败。我想我更喜欢用if(fInp)