|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|||||||||||
Как записать структуру в бинарный файл одним "блоком"24.09.2015, 20:55. Показов 2604. Ответов 38
Метки нет (Все метки)
Как записать структуру в бинарный файл одним "блоком", если в структуре есть private данные?
Как бы если структур много, а в них данных много, то запись кусочками не очень симпатична. Интересует как C++, так и вариант с Си, но дублировать темы нельзя, поэтому об обоих языках вопрос в одной ветке.
0
|
|||||||||||
| 24.09.2015, 20:55 | |
|
Ответы с готовыми решениями:
38
Как записать структуру в бинарный файл и прочесть из него? Как правильно записать в бинарный файл структуру, в которой есть string?
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
||||||
| 24.09.2015, 21:05 | ||||||
Сообщение было отмечено daslex как решение
Решение
private как-то мешает записывать её целиком?
1
|
||||||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 24.09.2015, 21:14 [ТС] | |
|
Все норм. ничто не мешает. ) понял.
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||
| 24.09.2015, 21:24 | |||
Сообщение было отмечено daslex как решение
РешениеЕсли говорить в общем, то классы и структуры, в которых содержатся данные в разных секциях так записывать нельзя, потому что:
Кроме этого ,есть еще проблема разного порядка байт (которая, впрочем, не важна, если мы не переносим такие дампы между платформами).
2
|
|||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 24.09.2015, 21:35 [ТС] | |
|
Т.е. так записывать можно только чистые структуры и классы, в которых абсолютно всё в одной секции, т.е. в секции public или же если абсолютно однозначно и запись и чтение будут выполнятся программой, скомпилированной в одном компиляторе с одними и теми же настройками на момент компиляции, да еще и исключительно для одной платформы?
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 24.09.2015, 21:39 | |
|
DrOffset, это разве не о классах?
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||||
| 24.09.2015, 21:45 | ||||
|
Добавлено через 26 секунд
1
|
||||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 24.09.2015, 21:46 | |
|
Ну если запись и чтение делает одна программа, то allocation должен совпадать.
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 24.09.2015, 21:51 | ||
|
Естественно в реальности все может быть хорошо. Мы вот недавно баг исправили, который 15 лет жил и никто его не замечал, пока компилятор не обновили. Мое дело предупредить, а вы сами решайте что с этим делать дальше.
1
|
||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 24.09.2015, 21:55 | |
|
Ну не может же одна и та же программа по разному строить одну и ту же структуру, нестыковки будут внутри.
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 24.09.2015, 22:02 | ||
|
Компилятор в отладочных целях может расположить элементы в разных секциях в одном порядке, а в релизе, с максимумом оптимизации в другом - это же обычное дело. Что толку спорить с фактами?
0
|
||
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|||
| 24.09.2015, 22:04 | |||
|
Не по теме: P.S. формально речь шла о write-only :)
0
|
|||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||
| 24.09.2015, 22:07 | |||
![]() Добавлено через 1 минуту
0
|
|||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||
| 24.09.2015, 22:09 [ТС] | ||
|
Можно немного почитать о POD типах и можно увидеть нечто типа:
но моя интуиция мне говорит, что в C++11 может быть так (ну не совсем так, но некоторым подобием такого) может и можно записывать в файл. Это только догадки, ни коим образом не утверждения.
0
|
||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
||
| 24.09.2015, 22:11 | ||
|
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||
| 24.09.2015, 22:15 | |||
|
Вот для сишных структур в пределах платформы ABI "стандартизировано" (но мы помним, что в сишных структурах не может быть никаких public\private), почитать можно тут. Добавлено через 1 минуту Но это несколько эфемерная гарантия, согласись. Разве что жестко зафиксировать версию и настройки компиляторов и ни в коем случае никому другому не давать свою программу собирать из исходников.
1
|
|||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 24.09.2015, 22:18 | |
|
Может, есть какие-то настройки компилятора, чтобы жёстко закрепить последовательность полей. Типа #pragma pack для выравнивания.
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 24.09.2015, 22:22 | ||
|
Только не проще ли писать сразу корректные программы, а не искать потом костыли для того, чтобы все не сломалось?
1
|
||
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,867
|
|||
| 24.09.2015, 22:53 | |||
|
я бы ввел в класс метод(ы) что то типа WriteFile ReadFile и в них бы все и реализовал а для корректной обработки данных от разных компиляторов, можно ввести поле версия и при чтении проверять свой файл или нет Добавлено через 1 минуту знаменитая MS pragma once, тому пример
0
|
|||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 24.09.2015, 22:57 | ||
|
В принципе конечно, если совсем строго подходить к вопросу, то так сохранять структуры можно только с отключенным выравниванием, с гарантией определенного порядка байт и только POD. Но вопрос с public\private более тонкий, поэтому я высказывался подробно только о нем.
0
|
||
| 24.09.2015, 22:57 | |
|
Помогаю со студенческими работами здесь
20
Записать структуру в бинарный файл Как правильно заполнить структуру и сохранить в бинарный файл? Как открыть бинарный файл, не зная его структуру? Как правильно сохранить и потом считать структуру в бинарный файл Создать текстовый файл ft и в итоге записать его как бинарный файл fd Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|