Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.79
goto
 Аватар для goto
76 / 34 / 4
Регистрация: 04.04.2011
Сообщений: 78
Записей в блоге: 1
18.07.2011, 16:22     ofstream & ifstream :: binary read-write struct #1
Не пойму в чем дело... но я не могу считать всю структуру 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();
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2011, 16:22     ofstream & ifstream :: binary read-write struct
Посмотрите здесь:

C++ ifstream/ofstream/fstream
Работаем с потоками на C++ ofstream и ifstream C++
C++ C++ файлы ifstream/ofstream
class/string/ifstream/ofstream C++
ifstream ofstream C++
Неправильно выполнение ifstream, ofstream C++
Перегрузка ifstream и ofstream? C++
Работа с потоками ofstream/ifstream C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
18.07.2011, 16:28     ofstream & ifstream :: binary read-write struct #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 );
goto
 Аватар для goto
76 / 34 / 4
Регистрация: 04.04.2011
Сообщений: 78
Записей в блоге: 1
18.07.2011, 16:42  [ТС]     ofstream & ifstream :: binary read-write struct #3
мдя... побитовый "ИЛИ" творит чудеса!) Благодарствую!
Yandex
Объявления
18.07.2011, 16:42     ofstream & ifstream :: binary read-write struct
Ответ Создать тему
Опции темы

Текущее время: 19:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru