|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|||||||||||
Как записать структуру в бинарный файл одним "блоком"24.09.2015, 20:55. Показов 2622. Ответов 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,871
|
|||
| 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|