![]() |
C++ Builder || Файловый ввод/вывод
Есть класс:
Код:
class dep{ Спасибо за помощь. |
Sir Z
Предлагаю вам ознакомиться с тем как представляются строки в памяти. А представляются они как правило указателем на первый символ строки и длиной строки. т.е. условно говоря строка представляет из себя Код:
class string Примерно так: Код:
class dep{ |
Предложенный Вами метод вообще исключает логическую связность хранимых данных, для чего был создан класс dep. Если идти таким путем, гораздо легче записывать подряд название, сумму, имя человека, название, сумму, имя человека и т.д. Вряд ли это оптимальный вариант в данной ситуации.
Подчеркну, что данные предпочтительно хранить именно в AnsiString вследствие внутреннего строения большинства компонентов vcl. Неужели крутые программеры, записывая данные из класса в файл, вручную переносят значения ВСЕХ переменных? |
Sir Z
Почитайте чего-нибудь про сериализацию классов. В гугле есть. >> Неужели крутые программеры, записывая данные из класса в файл, вручную переносят значения ВСЕХ переменных? Ох, не могу не похвалиться... Написал (уже полностью) библиотеку на QT, которая любой класс обучает самосериализации. Типа берёшь класс, добавляешь интерфейс спецмакросом, в спецметоде описываешь регистрацию переменных для выброса-вброса в XML - и всё. В любой момент ррраз - и класс пишет или читает себя и всех вложенных детей (в том числе и других таких же классов) в файл :-) Поддерживаются даже массивы. Дикая смесь шаблонов, макросов и наследований... :-) Мой лучший (пока) в жизни системный продуктик... |
Sir Z
Цитата:
Сейчас сериализацию модно автоматически (т.е. без написания своего кода) с помощью reflection делать. Но это в .NET/Java + скриптовых языках. На C++ не проканает. На C++ можно действительно можно пользоваться макросами для автонаписания подобного кода. Или boost::serialization, который вполне вероятно войдёт в следующий стандарт C++. hasherfrog А я подобную штуку (макросы для автомериализации) ещё лет 5 назад писал, в качестве proof of concept. Правда в голые файлы сохранял всё. Не любил XML, да и не люблю до сих пор. К сожалению, моя первая дом. страница закрылась раньше, чем её проиндексировал webarchive.org :( Все свои поделки я выкладывал именно там. А теперь ведь и взять больше неоткуда того чуда, дабы над ним посмеяться |
Sir Z, честно говоря, я не совсем понял, чего вы хотите добиться. Из того что вами написано, могу только поддержать ответивших вам форумчан. Давайте поясню:
Код:
class dep{ |
pva:
Давайте по порядку. 1. Когда я говорил о связности, я говорил о том, что гораздо удобнее читать весь объект сразу, а не его члены по отдельности. И так же записывать. 2. Цитата:
Цитата:
Цитата:
Цитата:
ЦЕЛЬ: есть класс, представляющий, к примеру, человека. Человек должно быть несколько(разных:)) и этот список надо хранить в файле. Данные хотелось бы защитить от чтения вне программы, поэтому читаю и пишу бинарно. Кстати, где достать классы шифрования данных? |
Sir Z
Цитата:
Вы знаете что такое указатель? А C-строки? Давайте ещё попробую объяснить всё ещё более на пальцах, чем до этого. C-строка - это указатель на первый элемент строки. Строка это просто последовательность символов (char), заканчивающаяся символом '\0'. Код:
char *str = (char*)malloc(100); //выделили 100 байт памяти P.S. записывать любые дынные сложнее, чем простые встроенные типы (int, char, double итп) банальным дампом памяти в двоичный файл нельзя. Да и то, даже с простыми типами будут появляться проблемы с переносом на различные архитектуры, ибо размер int может быть как 2 байта, так и 4 и 8. И порядок следования байтов может быть на разных платформах различный. Текстовые форматы надёжней. Цитата:
Цитата:
|
Время: 10:20. |
Время: 10:20.
© OSzone.net 2001-