FILE *_3dsfile = fopen(FileName, "r");
unsigned long filePos=0, fileEnd=0, lpos=0, chunkLength = 0;
unsigned short Chunk = 0;
model._objectCount = 0;
if (_3dsfile == NULL)
{
MessageBox(NULL, L"File are not exist or broken", L"loading error", MB_OK);
return;
}
filePos += 2*fread(&Chunk, 2, 1, _3dsfile);
if (Chunk != 0x4D4D)
{
MessageBox(NULL, L"Not a .3ds file", L"loading error", MB_OK);
return;
}
filePos += 4*fread(&fileEnd, 4, 1, _3dsfile);
while (filePos < fileEnd && filePos != lpos)
{
-------------------------- вот тута проблемма!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
lpos = filePos;
fpos_t gh = 0;
filePos += 2*fread(&Chunk, 2, 1, _3dsfile);
filePos += 4*fread(&chunkLength, 4, 1, _3dsfile);
fgetpos(_3dsfile, &gh);
-------------------------------------------------------------------------------------------------------------------------------
switch (Chunk)
{
case 0x3D3D:break;
case 0x4000:
{
char CH;
do
{
filePos += fread(&CH, 1, 1, _3dsfile);
}
while (CH != '\0' && filePos-lpos<chunkLength);
break;
};
//load single object from 3DS model------------------------------------------------
case 0x4100:
{
model._objectCount++;
model._objects.push_back(Get3DSObject(chunkLength, filePos, _3dsfile, Chunk));
};
//---------------------------------------------------------------------------------
default:
{
filePos += chunkLength - 6;
fseek(_3dsfile, chunkLength-6, SEEK_CUR);
};
}
}
fclose(_3dsfile);
fread читает больше чем положено!!!
Код:
по идеи значение gh должно в первом цикле = 12 но это не так, оно равно 13 и в последующих циклах я уже читаю данные в Chunk с неправильной позиции ну и ничего не работает!
Как смело вы файлик то открыли =^_^=
все тема закрыта!!! нужно открывать файл в режиме "rb" чтобы читать бинарные данные!!! тогда все будет читаться норм!!!