defi7
Интересующийся
Offline
|
|
« : 29-06-2012 11:10 » |
|
По этой ссылке нашёл сериализацию данных http://wiki.shelek.ru/index.php/FAQ:STL:C%2B%2B_сериализация_данных, а как теперь всё это применить к структуре WIN32_FIND_DATA, которая содержит инфу о каталогах, файлах и прочего, не пойму. Там написано, чтобы сериализировать например данные класса, нужно в него занести метод serialize и в нём отметить данные которые нужно сериализировать. У меня вопрос, как занести этот метод в структуру WIN32_FIND_DATA?
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #1 : 29-06-2012 11:29 » |
|
Ну, как вариант, унаследовать структуру и сереализовать потомка - это если хочется именно таким способом сериализовывать (гибкости и универсальности ради). Но, в зависимости от потребностей, можно, думаю, и без потомка обойтись: просто сделать шаблонную функцию, которая будет делать то же самое, что и метод serialize - применять оператор & к архиву и элементам структуры. upd. Хотя, наверное, это не пройдёт, если надо разделять экземпляры - всё равно архиву придётся информацию о базовом типе скармливать, так что, какие-то операторы для самой структуры или её потомков определять придётся.
|
|
« Последнее редактирование: 29-06-2012 11:37 от Вад »
|
Записан
|
|
|
|
defi7
Интересующийся
Offline
|
|
« Ответ #2 : 29-06-2012 12:11 » |
|
если хочется именно таким способом сериализовывать (гибкости и универсальности ради).
Вад, А какой бы способ сериализации, ты посоветовал бы мне по проще?
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #3 : 29-06-2012 13:19 » |
|
defi7, ну, в той статье, в частности, упоминается, что plain old data, к которому относится WIN32_FIND_DATA, можно без проблем сериализовать бинарно. Поэтому вопрос прежде к тебе: какую задачу ты пытаешься решить? Сохранить данные локально, передать по сети, записать в базу, другое?
|
|
|
Записан
|
|
|
|
defi7
Интересующийся
Offline
|
|
« Ответ #4 : 29-06-2012 13:46 » |
|
какую задачу ты пытаешься решить? Сохранить данные локально, передать по сети, записать в базу, другое?
Я хочу передать по сети.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #5 : 30-06-2012 14:13 » |
|
я бы в XML загнал и не мучался
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #6 : 01-07-2012 10:40 » |
|
defi7, если хочется универсальности, то можно допиливать сериализацию бустом (или чем-то ещё аналогичным), если задача одноразовая, то можно, как Лёша предлагает, первым попавшимся под руку инструментом сериализовать в определённый формат (тот же XML, или JSON какой) и передавать. Сериализатор в boost - это, имхо, уже молоток второго уровня: когда по ходу потребуется менять JSON на XML или что-то третье, чтобы не переписывать кусок кода, который может быть большим, если у нас много разных данных сериализуется.
|
|
« Последнее редактирование: 01-07-2012 10:43 от Вад »
|
Записан
|
|
|
|
defi7
Интересующийся
Offline
|
|
« Ответ #7 : 01-07-2012 12:38 » |
|
первым попавшимся под руку инструментом сериализовать в определённый формат (тот же XML, или JSON какой) и передавать.
Вад, каким например инструментом, желательно в формат XML? Я кроме boosta ничего подходящего не нашёл, и ради одной сиреализации не хочется его использовать. P.S. среда Visual Studio.
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #8 : 01-07-2012 17:46 » |
|
Можно что-нибудь вроде tinyxml/tinyxml++ применить.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #9 : 02-07-2012 08:42 » |
|
Можно что-нибудь вроде tinyxml/tinyxml++ применить.
ага, таким и пользуюсь ) Только дописал оболочку для удобств и красот
|
|
|
Записан
|
|
|
|
defi7
Интересующийся
Offline
|
|
« Ответ #10 : 03-07-2012 13:51 » |
|
загнал я WIN32_FIND_DATA в XML с помощью tinyxml всё ok, спасибо за подсказку. А вот как теперь заполнить её обратно? В tinyxml метод Attribute класса TiXmlElement возвращает значение определённого атрибута типа char. Пусть например это будет значение члена ftCreationTime структуры WIN32_FIND_DATA, у которого тип FILETIME. Как теперь обратно загнать значение в WIN32_FIND_DATA, ведь у него сейчас, после возврата метода Attribute тип char, а pFILEDATA.ftLastWriteTime просит FILETIME. WIN32_FIND_DATA *pFILEDATA = new WIN32_FIND_DATA; sprintf(pFILEDATA.ftLastWriteTime, "%d", element->Attribute("ftLastWriteTime"));
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #11 : 03-07-2012 13:55 » |
|
QueryXXXAttribute, где XXX - Int, Double, и т.п.
|
|
|
Записан
|
|
|
|
|