Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Сериализовать структуру WIN32_FIND_DATA  (Прочитано 11544 раз)
0 Пользователей и 1 Гость смотрят эту тему.
defi7
Интересующийся

ua
Offline Offline

« : 29-06-2012 11:10 » 

По этой ссылке нашёл сериализацию данных http://wiki.shelek.ru/index.php/FAQ:STL:C%2B%2B_сериализация_данных, а как теперь всё это применить к структуре WIN32_FIND_DATA, которая содержит инфу о каталогах, файлах и прочего, не пойму. Там написано, чтобы сериализировать например данные класса, нужно в него занести метод serialize и в нём отметить данные которые нужно сериализировать. У меня вопрос, как занести этот метод в структуру WIN32_FIND_DATA?
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 29-06-2012 11:29 » 

Ну, как вариант, унаследовать структуру и сереализовать потомка - это если хочется именно таким способом сериализовывать (гибкости и универсальности ради).
Но, в зависимости от потребностей, можно, думаю, и без потомка обойтись: просто сделать шаблонную функцию, которая будет делать то же самое, что и метод serialize - применять оператор & к архиву и элементам структуры.
upd. Хотя, наверное, это не пройдёт, если надо разделять экземпляры - всё равно архиву придётся информацию о базовом типе скармливать, так что, какие-то операторы для самой структуры или её потомков определять придётся.
« Последнее редактирование: 29-06-2012 11:37 от Вад » Записан
defi7
Интересующийся

ua
Offline Offline

« Ответ #2 : 29-06-2012 12:11 » 

если хочется именно таким способом сериализовывать (гибкости и универсальности ради).
Вад, А какой бы способ сериализации, ты посоветовал бы мне по проще?
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 29-06-2012 13:19 » 

defi7, ну, в той статье, в частности, упоминается, что plain old data, к которому относится WIN32_FIND_DATA, можно без проблем сериализовать бинарно.
Поэтому вопрос прежде к тебе: какую задачу ты пытаешься решить? Сохранить данные локально, передать по сети, записать в базу, другое?
Записан
defi7
Интересующийся

ua
Offline Offline

« Ответ #4 : 29-06-2012 13:46 » 

какую задачу ты пытаешься решить? Сохранить данные локально, передать по сети, записать в базу, другое?
Я хочу передать по сети.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 30-06-2012 14:13 » 

я бы в XML загнал и не мучался Улыбаюсь
Записан

Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 01-07-2012 10:40 » 

defi7, если хочется универсальности, то можно допиливать сериализацию бустом (или чем-то ещё аналогичным), если задача одноразовая, то можно, как Лёша предлагает, первым попавшимся под руку инструментом сериализовать в определённый формат (тот же XML, или JSON какой) и передавать.
Сериализатор в boost - это, имхо, уже молоток второго уровня: когда по ходу потребуется менять JSON на XML или что-то третье, чтобы не переписывать кусок кода, который может быть большим, если у нас много разных данных сериализуется.
« Последнее редактирование: 01-07-2012 10:43 от Вад » Записан
defi7
Интересующийся

ua
Offline Offline

« Ответ #7 : 01-07-2012 12:38 » 

Цитата
первым попавшимся под руку инструментом сериализовать в определённый формат (тот же XML, или JSON какой) и передавать.
Вад, каким например инструментом, желательно в формат XML? Я кроме boosta ничего подходящего не нашёл, и ради одной сиреализации не хочется его использовать.
P.S. среда Visual Studio.
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 01-07-2012 17:46 » 

Можно что-нибудь вроде tinyxml/tinyxml++ применить.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 02-07-2012 08:42 » 

Можно что-нибудь вроде tinyxml/tinyxml++ применить.
ага, таким и пользуюсь ) Только дописал оболочку для удобств и красот
Записан

defi7
Интересующийся

ua
Offline 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.

Код: (C++)
WIN32_FIND_DATA *pFILEDATA = new WIN32_FIND_DATA;
sprintf(pFILEDATA.ftLastWriteTime, "%d", element->Attribute("ftLastWriteTime"));
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 03-07-2012 13:55 » new

QueryXXXAttribute, где XXX - Int, Double, и т.п.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines