繁体   English   中英

ifstream.eof() - 在真实结束之前到达文件末尾

[英]ifstream.eof() - end of file is reached before the real end

我有一个大约11.1G的二进制文件,其中存储了Kinect的一系列深度帧。 此文件中有19437个帧。 要每次读取一帧,我在fstream中使用ifstream ,但它在文件的真实结束之前达到eof (我只得到了前20帧,并且由于eof标志,函数停止了)

但是,可以使用stdio中的 fread来读取所有帧。

谁能解释这种情况呢? 感谢您在我的问题上花费宝贵的时间。

这是我的两个功能:

// ifstream.read() - Does Not Work: the loop will stop after 20th frame because of the eof flag
ifstream depthStream("fileName.dat");
if(depthStream.is_open())
{
  while(!depthStream.eof())
  {
    char* buffer = new char[640*480*2];
    depthStream.read(buffer, 640*480*2);

    // Store the buffer data in OpenCV Mat

    delete[] buffer;
  }
}

// fread() - Work: Get 19437 frames successfully
FILE* depthStream
depthStream = fopen("fileName.dat", "rb");
if(depthStream != NULL)
{
  while(!feof(depthStream))
  {
    char* buffer = new char[640*480*2];
    fread(buffer, 1, 640*480*2, depthStream);

    // Store the buffer data in OpenCV Mat

    delete[] buffer;
}

再次感谢宝贵的时间在我的问题上

您需要以二进制模式打开流,否则它将在其看到的第一个字节处停止,值为26。

ifstream depthStream("fileName.dat", ios_base::in | ios_base::binary);

至于为什么26是特殊的,它是Ctrl-Z的代码,它是用于标记文本文件结尾的约定。 背后的历史记录在Raymond Chen的博客中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM