Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2012, 05:20   #1
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию Считывание бинарных файлов

Проблема состоит в том, что на какой-то части считывания 3ds-файла (он бинарный) программа зависает. (внизу будет ссылка на файл, если у вас не будет зависать пишите).

Вот код:
Код:
int Load3DS (model_type_ptr p_model, char *p_filename)
{

    int j = 0;

	FILE *l_file;

	unsigned short l_chunk_id;
	unsigned int l_chunk_lenght;

	unsigned char l_char;
	unsigned short l_qty; //Number of elements in each chunk

	unsigned short l_face_flags; //Flag that stores some face information
	int i;

	if ((l_file = fopen(p_filename, "rb")))
	{

        while (ftell(l_file) < filelength(fileno(l_file))) //Loop to scan the whole file
        {
            //getche(); //Insert this command for debug (to wait for keypress for each chuck reading)

            fread(&l_chunk_id, 2, 1, l_file); //Read the chunk header
            printf("ChunkID: %x\n",l_chunk_id);
            fread(&l_chunk_lenght, 4, 1, l_file); //Read the lenght of the chunk
            printf("ChunkLenght: %x\n",l_chunk_lenght);

            switch (l_chunk_id)
            {
                case 0x4d4d:
                break;

                case 0x3d3d:
                break;

                case 0x4000:
                    i=0;
                    do
                    {
                        fread(&l_char, 1, 1, l_file);
                        p_model->name[i]=l_char;
                        i++;
                    }while (l_char != '\0' && i<20);
                    break;

                case 0x4100:
                    break;

                case 0x4110:
                    fread(&l_qty, sizeof (unsigned short), 1, l_file);
                    p_model->vertices_qty = l_qty;
                    printf("Number of vertices: %d\n",l_qty);
                    for (i=0; i<l_qty; i++)
                    {
                        fread(&p_model->vertex[i].x, sizeof(float), 1, l_file);
                        printf("Vertices list x: %f\n",p_model->vertex[i].x);
                        fread(&p_model->vertex[i].y, sizeof(float), 1, l_file);
                        printf("Vertices list y: %f\n",p_model->vertex[i].y);
                        fread(&p_model->vertex[i].z, sizeof(float), 1, l_file);
                        printf("Vertices list z: %f\n",p_model->vertex[i].z);
                    }
                    break;

                case 0x4120:
                    fread(&l_qty, sizeof (unsigned short), 1, l_file);
                    p_model->polygons_qty = l_qty;
                    printf("Number of polygons: %d\n",l_qty);
                    for (i=0; i<l_qty; i++)
                    {
                        fread(&p_model->polygon[i].x, sizeof (unsigned short), 1, l_file);
                        printf("Polygon point a: %d\n",p_model->polygon[i].x);
                        fread(&p_model->polygon[i].y, sizeof (unsigned short), 1, l_file);
                        printf("Polygon point b: %d\n",p_model->polygon[i].y);
                        fread(&p_model->polygon[i].z, sizeof (unsigned short), 1, l_file);
                        printf("Polygon point c: %d\n",p_model->polygon[i].z);
                        fread(&l_face_flags, sizeof (unsigned short), 1, l_file);
                        printf("Face flags: %x\n",l_face_flags);
                    }
                    break;

                case 0x4140:
                    fread (&l_qty, sizeof (unsigned short), 1, l_file);
                    for (i=0; i<l_qty; i++)
                    {
                        fread(&p_model->mapcoord[i].x, sizeof (float), 1, l_file);
                        printf("Mapping list u: %f\n",p_model->mapcoord[i].x);
                        fread(&p_model->mapcoord[i].y, sizeof (float), 1, l_file);
                        printf("Mapping list v: %f\n",p_model->mapcoord[i].y);
                    }
                    break;

                default:
                    fseek(l_file, l_chunk_lenght-6, SEEK_CUR);

            }

        }

        fclose(l_file); // Closes the file stream
        return 1; // Returns ok
	}
	else
	{
	    return 0;
	}
}
Помогите найти ошибку, код взят из примера, чуть-чуть переделан.
Доходит к тому, что j = 681 и тогда глюк
Заранее благодарен, с меня плюсы естественно.
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 11.02.2012, 05:25   #2
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

Простите забыл закинуть файл, У. Администрация, надеюсь 1 раз простите и не сочтете за набивание постов.
Debug.rar
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 11.02.2012, 22:02   #3
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

Тема уже не актуальна, почему не работало не знаю, но переделал код на аналогичный и заработало.
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Редактирование бинарных файлов Sa1vatore Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 08.10.2010 17:54
Обработка текстовых и бинарных файлов. Sekmegalife Помощь студентам 0 22.12.2009 21:51
Извлечение ресурсов из бинарных файлов dimkin Общие вопросы Delphi 2 28.08.2009 17:06
Обработка бинарных файлов (Си) Сэм Помощь студентам 35 01.05.2009 21:18
Чтение Бинарных Файлов Maksitron Общие вопросы C/C++ 6 23.02.2009 21:37