Модераторы: bsa
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Считываем Бинарные файлы в С++, обьясните пару функций для чтения  
:(
    Опции темы
Maksitron
Дата 23.2.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 23.2.2009

Репутация: -3
Всего: -3



Всем привет  . Я лично програмаю на Делфи, но вот случилась беда и пришлось разобрать код на C++ ( Visual C++ 6 ). - Нужно как бы перевести Сишный код для Делфи. И тут возникло пару запарок: с функциями чтения бинарных файлов я не знаком((( поэтому прошу Экспертов ( и просто знающих людей ) обьяснить мне пару функций - что они делают , какие у них аргументы  

Вот функции: 
1) inFile.good() -( как я понимаю счётчик конца файла? )
2)inFile.seekg( Position ); - ( как я понимаю перемещает каретку на нужную позицию в файле ? )
3) char Ch; 
inFile >> Ch; - ( как я понимаю считывает 1 байт из файла в переменную типа Char ?)
4) inFile.tellg() - ( возвращает позицию каретки в файле? )
5) inFile.ignore(1); - тут даже предположений нет - хз что она делает (((


А вот код всей функции :

Код

bool remMesh::LoadFromFile(const rStr &Filename)
{
streampos NextNode = 0, Tmp, Face_p, Vertex_p;
SingleGeomNode N;
int i, Hdr = 0;
char Ch;

ifstream inFile(Filename.c_str(), ios::in | ios::binary | ios::nocreate);
// if file open error
if (!inFile) return false;
// Else read file and save data to vector MeshVerts
while (inFile.good())
{
N.WithMtl = false;
N.WithTexture = false;
N.TextureName = "";
// read num faces and vertexes
inFile.seekg(NextNode + 2);

inFile.read((char *)&Tmp, 4);
N.MeshVerts.resize(Tmp);

inFile.read((char *)&Tmp, 4);
N.MeshTVerts.resize(Tmp);

inFile.read((char *)&Tmp, 4);
N.MeshFaces.resize(Tmp);

// process with data
inFile.read((char *)&NextNode, 4);

inFile.seekg(inFile.tellg() + 2);



// Reed material data
inFile.read((char *)&Vertex_p, 4);
// Check if material present

inFile.read((char *)&Hdr, 2);
inFile.seekg(inFile.tellg() - 2)
;
if (Hdr != ID_VERTEX_HEADER)
{
N.WithMtl = true;
// read material components
inFile.read((char *)&N.mtlAmbient.C[0], sizeof(float) * 3);
inFile.read((char *)&N.mtlDiffuse.C[0], sizeof(float) * 3);
inFile.read((char *)&N.mtlSpecular.C[0], sizeof(float) * 3);
// read Shininess
inFile.read((char *)&N.mtlSpecular.C[3], sizeof(float));
// read filename
do {
inFile >> Ch;
N.TextureName += Ch;
} while(Ch != 0);
N.TextureName.resize(N.TextureName.size() - 1);
}

// Read Vertex data.
inFile.seekg(inFile.tellg() + 2);

inFile.read((char *)&Face_p, 4);


while (inFile.good() && (inFile.tellg() < NextNode))
{
for (i = 0; i < N.MeshVerts.size(); i++)
{
inFile.read((char *)&N.MeshVerts[i].vert[0], sizeof(float) * 3);
inFile.read((char *)&N.MeshVerts[i].normal[0], sizeof(float) * 3);
}
// Read Texture vertex data
inFile.read((char *)&Tmp, 2);
if (Tmp == ID_TVERTEX_HEADER)
{
for (i = 0; i < N.MeshTVerts.size(); i++)
{
inFile.read((char *)&N.MeshTVerts[i].vert[0], sizeof(float) * 2);
}
}
else
inFile.seekg(inFile.tellg() - 2);

// Skip Face data block header
inFile.read((char *)&Tmp, 2);
// Read face data
for (i = 0; i < N.MeshFaces.size(); i++)
{
if (N.MeshTVerts.size() != 0)
inFile.read((char *)&N.MeshFaces[i].VertIndex[0], sizeof(float) * 6);
else
inFile.read((char *)&N.MeshFaces[i].VertIndex[0], sizeof(float) * 3);
}

inFile.ignore(1);
}
Model.push_back(N);
}
return true;
}


M
JackYF
Не забываем про кнопку "Код".


Это сообщение отредактировал(а) JackYF - 25.2.2009, 23:23
PM MAIL   Вверх
andrew_121
Дата 23.2.2009, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Maksitron, Вот ответ на все вопросы: http://www.cplusplus.com/reference/iostream/


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
zim22
Дата 23.2.2009, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69





--------------------
PM MAIL   Вверх
Maksitron
Дата 23.2.2009, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 23.2.2009

Репутация: -3
Всего: -3



а просто так без сылок нельзя чтоли объяснить? 
Меня в общем больше всего интересует вот эта функция inFile.ignore(1); .
Неужели (если вы знаете её значение) вам так сложно в двух словах обьяснить что она делает?

Знаете ли ваш ответ дословно звучит так : " Ты эт,.. возьми чтоль самоучитель по Сишке - посмотри, поучи : авось что и узнаешь " . 

А мне ведь всего 1 функция нужна (

Это сообщение отредактировал(а) Maksitron - 23.2.2009, 19:22
PM MAIL   Вверх
Maksitron
Дата 23.2.2009, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 23.2.2009

Репутация: -3
Всего: -3



MaTBeu - модератов форума http://www.programmersforum.ru
Цитата

Первые 2, 3 и 4 пункты правильно вы определили. 
Пятый пункт - это пропуск определенного количества символов относительно текущей позиции в файле.
Первый пункт - это определение состояния потока для установки флагов. Флаги бывают нескольких типов ios::badbit, ios::goodbit, ios::failbit и ios::eofbit.
Флаги показывают состояние потока если goodbit - значит поток в норме.
badbit - в потоке ошибки.
failbit - приблизительно тоже самое что и badbit
eofbit - конец потока.


Вот вам пример для ответов , учитесь господа ссылошники smile
PM MAIL   Вверх
andrew_121
Дата 23.2.2009, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(Maksitron @ 23.2.2009,  19:39)
MaTBeu - модератов форума http://www.programmersforum.ru
Цитата

Первые 2, 3 и 4 пункты правильно вы определили. 
Пятый пункт - это пропуск определенного количества символов относительно текущей позиции в файле.
Первый пункт - это определение состояния потока для установки флагов. Флаги бывают нескольких типов ios::badbit, ios::goodbit, ios::failbit и ios::eofbit.
Флаги показывают состояние потока если goodbit - значит поток в норме.
badbit - в потоке ошибки.
failbit - приблизительно тоже самое что и badbit
eofbit - конец потока.


Вот вам пример для ответов , учитесь господа ссылошники smile

Господа, оффтоп!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-1 солидарно!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Добавлено через 3 минуты и 10 секунд
Цитата с того самого форума. Промолчу ... =)
Цитата

Мда... мне начинает казаться что я безнадёжен...




--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
JackYF
Дата 25.2.2009, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162




 ! 
JackYF
Maksitron, рекомендую прочитать правила форума. У тебя есть на это время теперь.


Тема закрыта.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.3353 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.