Yaklaşık 11.1G ikili dosyam var, burada bir dizi derinlik karesini Kinect'ten depolar. Bu dosyada 19437 çerçeve var. zaman başına bir kare okumak için, ben ifstream fstream kullanmak ama dosyanın gerçek sonundan önce eofulaşır. (Yalnızca ilk 20 kare var ve fonksiyon nedeniyle durur eof bayrak)ifstream.eof() - dosyanın sonuna gerçek sonlanmadan önce ulaşılır
Ancak, tüm çerçeveler yerine stdio fread kullanılarak okunabilir.
Bu durumu açıklayan var mı? Sorumu değerli zaman ayırdığınız için teşekkür ederim. aksi takdirde ilk bayt o durur, yine
// 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 akışını ikili modda açarsınız, neden ikili modda C++ akışını açmadınız? ifstream depthStream ("fileName.dat", std :: ios_base :: bin); '(Ayrıca, her yineleme arabelleği silme ve yeniden sorgulama biraz saçma gibi görünüyor değil mi? Ve arabellek için' std :: vector' kullanma .) –
Ayrıca bkz. Http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong. Buna ek olarak, muhtemelen std :: vector arabelleği (boyut); 'yerine buffer = new char [size]; –
gibi bir şey kullanmak istersiniz. Bu: while (! DepthStream.eof()' her zaman yanlıştır Diğer koşullar, dosyanın sonuna kadar okunamaya neden olabilir –