私はKinectから一連の深度フレームを格納する約11.1Gのバイナリファイルを持っています。このファイルには19437フレームあります。時間ごとに一つのフレームを読み取るには、私はのfstreamにはifstreamを使用するが、それは、ファイルの実際の終了前EOFに達します。 (私は最初の20個のフレームを持って、そして機能が原因EOFフラグ停止)ifstream.eof() - ファイルの終わりが実際の終わりに達するまで
しかし、すべてのフレームが代わり標準入出力に関数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;
}
、あなたがそれ以外の場合は、最初のバイトでそれを停止します、バイナリモードでストリームをオープンする必要があり、私の質問
Cストリームをバイナリモードで開くと、なぜC++ストリームをバイナリモードで開かなかったのですか? 'ifstream depthStream(" fileName.dat "、std :: ios_base :: bin);'(また、各反復の削除と再取得は少しばかげているようですが、バッファには 'std :: vector'を使います) –
参照:http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong。さらに、 'buffer = new char [size];の代わりに' std :: vector buffer(size); 'のようなものを使用したいと思うかもしれません –
これは' while(!depthStream.eof() 'は常に間違っています –