c++ 读取二进制文件时tellg()=-1
我有文件夹binarytry.dat,里面是6行168750列的数据,都是unsignedchar型。我想读取第一行的数据,于是写了如下代码:constsize_tfea...
我有文件夹binarytry.dat,里面是6行168750列的数据,都是unsigned char型。
我想读取第一行的数据,于是写了如下代码:
const size_t featureDim = 168750;
ifstream inin("binarytry.dat");
unsigned char arr[featureDim];
inin.read((char*)&arr,featureDim*sizeof(unsigned char));
cout<<inin.tellg()<<endl;//这里输出-1
inin.seekg(0,ios::end);
cout<<inin.tellg()<<endl<<endl;//这里也输出-1
我不明白这是为什么呢?
我测试了一下,当读到第1151个数时,tellg()=4096,我不明白这是为什么呢?
第1151个数时26 展开
我想读取第一行的数据,于是写了如下代码:
const size_t featureDim = 168750;
ifstream inin("binarytry.dat");
unsigned char arr[featureDim];
inin.read((char*)&arr,featureDim*sizeof(unsigned char));
cout<<inin.tellg()<<endl;//这里输出-1
inin.seekg(0,ios::end);
cout<<inin.tellg()<<endl<<endl;//这里也输出-1
我不明白这是为什么呢?
我测试了一下,当读到第1151个数时,tellg()=4096,我不明白这是为什么呢?
第1151个数时26 展开
2个回答
展开全部
输出-1是因为inin到了文件的末尾以后,指针inin已经变成NULL或者指向未知位置。所以调用tellg()时,始终返回-1,表示失败。可以将featureDim适当调小,应该能返回正值。至于问题补充情况,是因为文件的读取方式未选择二进制。将ifstream inin("binarytry.dat");改成ifstream inin("binarytry.dat",std::ifstream::binary);应该能够解决。
追问
谢谢您!!
嗯嗯,确实加了ios::binary后正确了,但是我想不明白为什么呢?
追答
读取方式会影响结果,二进制的文件应该用二进制方式读取。这可能跟文件流的内在机制有关。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询