Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.79
goto
76 / 34 / 4
Регистрация: 04.04.2011
Сообщений: 78
Записей в блоге: 1
#1

ofstream & ifstream :: binary read-write struct - C++

18.07.2011, 16:22. Просмотров 3135. Ответов 2
Метки нет (Все метки)

Не пойму в чем дело... но я не могу считать всю структуру FNTBINARY из файла, файл - это она и есть в бинарном виде, одна структура FNTBINARY. Размер структуры 72412, файл на диске весит 72440 откуда, берутся 8 байт? Формат записи-чтения установлен бинарный. Читается только часть, до chars[32]... дальше мусор. Проверял, что пишется структура полностью адекватная перед записью, содержит нормальные данные... запиcь производиться так...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bool CFnt :: SaveBinary(char * bin_fnt_file_name) 
{
    std::ofstream out_bin_fnt_file( bin_fnt_file_name, std::ios::out || std::ios::binary );
 
    if (!out_bin_fnt_file.is_open()) return false;
 
    std::streamsize buffsize = sizeof (FNTBINARY);
    FNTBINARY t;
    memcpy(&t, &fb, buffsize);
    
    out_bin_fnt_file.write((char*) &t, buffsize );
 
    out_bin_fnt_file.flush();
    out_bin_fnt_file.close();
    return true;
}

Сама струкрура
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#pragma pack(push)
#pragma pack(1)
typedef struct FNTCHAR 
{
    short id;           // Код символа 
    short x;            // х текстурная координата
    short y;            // у текструная координата
    short w;            // ширина буквы
    short h;            // высота
    short xoff;     // сдвиг по х
    short yoff;     // сдвиг по у
    short xadvance; // 
    unsigned char page;
    unsigned char chnl;
 
} FNTCHAR, *PFNTCHAR;
 
typedef struct FNTBINARY 
{
    short chars_size;           // Размер букв
    short base;             // Размер самой большой буквы (для вертикального переноса строки)
    char font_name[64];     // Имя шрифта
    char texture_name[64];  // Файл текстуры
    struct FNTCHAR chars[260];      // Метрики букв
    char kerning[260][260]; // Кернинг букв
} FNTBINARY;
#pragma pack(pop)
Загрузка...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool CFnt :: LoadBinary(char * bin_fnt_file_name)
{
    
    std::ifstream in_bin_fnt_file( bin_fnt_file_name, std::ios::in || std::ios::binary );
    
    if (!in_bin_fnt_file.is_open()) return false;
    std::streamsize buffsize = sizeof (FNTBINARY);
    FNTBINARY t;
 
    in_bin_fnt_file.read( (char*) &t, buffsize);
    memcpy(&fb, &t, buffsize);
    in_bin_fnt_file.close();
    return true;
}
Класс со структурой fb (font binary)
C++
1
2
3
4
5
6
7
8
9
10
11
12
class CFnt 
{
public:
    struct FNTBINARY fb;
 
    bool CompileMetricFile ( char * fnt_file_name );
    bool SaveBinary ( char * bin_fnt_file_name );
    bool LoadBinary ( char * bin_fnt_file_name );
 
    CFnt(); 
    ~CFnt();
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2011, 16:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ofstream & ifstream :: binary read-write struct (C++):

Read and write binary file - C++
Ребята, срочно нужна помощь. Записываю класс Message с сообщениями в файл. struct Head { public: int who; int to; ...

ifstream ofstream - C++
как работают данные файловые операции, объясните пожалуйста куда происходит запись ена жёстком диске

Перегрузка ifstream и ofstream? - C++
Есть класс //test.h cass test { private: int i; string st; public:

C++ файлы ifstream/ofstream - C++
Доброе время суток нужна небольшая помощь с записью/считыванием из файла вообщем при считывание из файла eof() не определяет конца файла и...

ifstream/ofstream/fstream - C++
#include <fstream> fstream autosave; autosave.open("...autosave.txt"); char x; autosave << x; cout >>...

Работаем с потоками на C++ ofstream и ifstream - C++
Доброго времени суток! Подскажите пожалуйста, как при использовании ofstream и ifstream переставить курсор в начало файла?

2
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
18.07.2011, 16:28 #2
Цитата Сообщение от goto Посмотреть сообщение
C++
1
std::ofstream out_bin_fnt_file( bin_fnt_file_name, std::ios::out || std::ios::binary );
Разве ? Может так ?
C++
1
std::ofstream out_bin_fnt_file( bin_fnt_file_name, std::ios::out | std::ios::binary );
2
goto
76 / 34 / 4
Регистрация: 04.04.2011
Сообщений: 78
Записей в блоге: 1
18.07.2011, 16:42  [ТС] #3
мдя... побитовый "ИЛИ" творит чудеса!) Благодарствую!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2011, 16:42
Привет! Вот еще темы с ответами:

Сокращенная запись ifstream и ofstream - C++
#include <fstream> using namespace std; int main() { fstream I("input.txt"), O("output.txt", 2); что означает второй...

Функции ifstream , ofstream. Исправить - C++
Помогите исправить код пжлст, не работает прога( #include "stdafx.h" #include <iostream> #include <conio.h> #include <stdio.h> ...

ifstream, ofstream и объекты класса - C++
Доброго времени суток, помогите пожалуйста разобраться. Есть некий класс: class Tr { public: Tr(){} ~Tr(){} private:

Неправильно выполнение ifstream, ofstream - C++
Не происходит ни открытие файла, ни выполнение операций ввода-вывода ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru