Не работает функция fread

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Defder
Сообщения: 64
Зарегистрирован: 24 май 2005, 12:25

Помогите, пожалуйста

FILE *f;
f=fopen("3.tri","r");
if (!f) {
sprintf(str, "Error read file");
return 1;
}
TriHeader hdr;
int b;
b=fread(&hdr,16,1,f);
unsigned short *FileData;
unsigned VtxCount=4*hdr.M*hdr.N-2;
FileData=new unsigned short [VtxCount];
b=fread(FileData,VtxCount,1,f);

TriHeader - 16 байт

В общем первая функция fread читает, вторая - нет.
Размер файла достаточный.

Читал мелкими порциями (по 2 байта), прочитало только часть файла. Дальше - та же проблема.

Компилятор - Visual C++ 6.0
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

файл нужно открывать "rb", если читаешь бинарные данные. Если он будет открыт, как "r", то ASCII симол 27 расценивается, как конец текстового файла, что и, происходит, собственно.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

Это не единственная ошибка, во втором fread еще и 2-й параметр задан неверно.
Надо так:

Код: Выделить всё

  b=fread(FileData,VtxCount*sizeof(unsigned short),1,f); 
Defder
Сообщения: 64
Зарегистрирован: 24 май 2005, 12:25

Большое спасибо за помощь :)

Переводил код с MATLAB, там файловые функции так же называются, но работают по другому :wink:
Ответить