从 C++ Visual 2006 迁移到 V2010 CFile 到 ifstream
Migration from C++ Visual 2006 to V2010 CFile to ifstream
我想将一些用 C++ Visual 2006 编写的代码迁移到 C++ V2010。
它是:
CFile *fInp;
...
int iStatus = fInp->Read(chMsg, iMaxBuffer);
现在我正在尝试这样做:
ifstream *fInp;
...
int iStatus = fInp->read(chMsg, iMaxBuffer);
但 CFile::Read returns 具有移动了多少个字符的值的 int,但 ifstream::read 没有。
我怎样才能得到那个值?
这行得通吗:
fInp->read(chMsg, iMaxBuffer);
int iStatus = fInp->gcount();
??
阅读 doc 后,我的答案如下:
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)。
我想将一些用 C++ Visual 2006 编写的代码迁移到 C++ V2010。 它是:
CFile *fInp;
...
int iStatus = fInp->Read(chMsg, iMaxBuffer);
现在我正在尝试这样做:
ifstream *fInp;
...
int iStatus = fInp->read(chMsg, iMaxBuffer);
但 CFile::Read returns 具有移动了多少个字符的值的 int,但 ifstream::read 没有。 我怎样才能得到那个值?
这行得通吗:
fInp->read(chMsg, iMaxBuffer);
int iStatus = fInp->gcount();
??
阅读 doc 后,我的答案如下:
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)。