我正在尝试读取 UNIX 上的二进制文件。文件存在,里面有一些数据信息。
代码如下所示:
fstrean fstrHandler;
string strFileName;
char Buf[30000];
fstrHandler.open(strFileName.c_str(), ios::in | ios::binary);
fstrHandler.seekp(0, std::ios_base::beg);
std::cout<< "Posi before read= "<< fstrHandler.tellg()<<endl; //*** Show after running 0
fstrHandler.read (Buf, 400);
std::cout<< "Posi after read= "<< fstrHandler.tellg()<<endl; //*** Show after running 0
std::cout<< " gcount ()= "<< fstrHandler.gcount ()<< << endl; //*** Show after running 0
if (fstrHandler.eof ()) {
fstrHandler.clear();
}
读取后我得到文件中的位置仍然是零零,但文件不为空。
最佳答案
尝试使用 seekg
而不是 seekp
,文件中是否有 400 字节?如果您输入一个包含超过 400 个字节的文件,这对我来说似乎没问题。如果小于,则 tellg
after read 报告 -1,但 gcount()
是正确的。
此外,在打开文件后 - 测试文件是否确实已打开,例如
if (fstrHandler)
{
// do stuff
}
else
std::cerr << "foo bar" << std::endl;
关于c++ - 读取时的 fstream unix 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4874530/