Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

fread читает больше чем положено!!!

7.9K
15 апреля 2011 года
Crainov
39 / / 04.06.2006
Код:
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);


по идеи значение gh должно в первом цикле = 12 но это не так, оно равно 13 и в последующих циклах я уже читаю данные в Chunk с неправильной позиции ну и ничего не работает!
260
15 апреля 2011 года
Ramon
1.1K / / 16.08.2003
Как смело вы файлик то открыли =^_^=
7.9K
15 апреля 2011 года
Crainov
39 / / 04.06.2006
все тема закрыта!!! нужно открывать файл в режиме "rb" чтобы читать бинарные данные!!! тогда все будет читаться норм!!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог