Название: Запись структуры в файл с помощью Qt Отправлено: JamS007 от Октябрь 24, 2009, 21:12 Здравствуйте,
в QT я еще не силён, и потому столкнулся с такой проблемой: в других известных мне компиляторах я мог записывать созданную собой структуру в файл с помощью стандартной функции fwrite(). к примеру: Код: struct { // структура для рализации Код: FILE *Path = fopen("C:\file.abc","w"); А теперь, собственно, вопросы: 1. Можно ли средствами Qt организовать такое взаимодействие? 2. Если можно, то нужно ли ограничивать такие типы как QString, просто в некоторых компиляторах требовалось чётко зафиксировать размер данной переменной. 3. Если такое невозможно, то подскажите, пожалуйста эквивалентный способ... И еще... если это возможно - покажите примерчик такой реализации. Спасибо! Название: Re: Запись структуры в файл с помощью Qt Отправлено: Авварон от Октябрь 24, 2009, 21:20 QFile f("...");
f.open(QFile::WriteOnly); f.write((const char*)StructPtr, sizeof(Struct)); Название: Re: Запись структуры в файл с помощью Qt Отправлено: Igors от Октябрь 24, 2009, 21:32 Код: FILE *Path = fopen("C:\file.abc","w"); - разное выравнивание (alignment) на разных платформах/компиляторах - разное Endian А вот читать/писать каждый член (с помощью операторов << и >>) - без проблем. Да, придется немного больше написать но это несоразмеримо меньше с очень дорогой ценой которую надо заплатить за "просто sizeof". Название: Re: Запись структуры в файл с помощью Qt Отправлено: JamS007 от Октябрь 24, 2009, 21:41 разобрался... а теперь не могу прочитать данные записанные в структуру способом, описанном в посте №1. Помогите, пожалуйста. Название: Re: Запись структуры в файл с помощью Qt Отправлено: Igors от Октябрь 24, 2009, 22:05 может быть примерчик? :) Объявите члены как QList или QVector вместо массивов. Если ShortString не очень дорога сердцу, замените ее на что-нибудь ходовое, напр. тот же QString. Тогда для I/O писать совсем немногоКод: QDataStream & operator << ( QDataStream & out, const Question & q ) Название: Re: Запись структуры в файл с помощью Qt Отправлено: JamS007 от Октябрь 24, 2009, 22:08 спасибо... конструкция мудрёная, первый раз такую вижу. может быть действительно так и легче, но я что-то не пойму, как таким способом указать файл выхода, его параметры?
П.С. Сильно не пинайте... только учусь. ::) Название: Re: Запись структуры в файл с помощью Qt Отправлено: Igors от Октябрь 24, 2009, 22:15 спасибо... конструкция мудрёная, первый раз такую вижу. может быть действительно так и легче, но я что-то не пойму, как таким способом указать файл выхода, его параметры? Код: QFile file("myfile"); Название: Re: Запись структуры в файл с помощью Qt Отправлено: JamS007 от Октябрь 24, 2009, 22:22 Спасибо что возитесь со мной.
Цитировать QDataStream & Question::operator << ( QDataStream & out, const Question & q ) - это, как я понимаю, функция, если да, то откуда и как ее вызывать, так, чтоб потом обьект out передать в { out << sQuestion; out << sFirstVariant << sSecondVariant << sThirdVariant << sCorrectVariant; out << sTheme << sObject; return out; } Цитировать QFile file("myfile"); file.open(QFile::WriteOnly); DataStrream out(&file); out << theQuestion; Может это и тупо читать... я понимаю, но я очень хочу это понять. Название: Re: Запись структуры в файл с помощью Qt Отправлено: Авварон от Октябрь 24, 2009, 22:34 это перегрузка оператора сдвига <<
использование: DataStrream out(&file); out << theQuestion; // вот Название: Re: Запись структуры в файл с помощью Qt Отправлено: JamS007 от Октябрь 24, 2009, 22:53 Итак, почитав чуть учебник по данной теме понял, что используя Qt можно забыть о записывании структуры в файл таким легким способом... А придется всё писать по очереди с помощью потока ввода/вывода... А Структура - это так, чтоб красиво было, можно и без нее... Да? (Если не прав - поправьте)
Название: Re: Запись структуры в файл с помощью Qt Отправлено: Авварон от Октябрь 24, 2009, 23:13 а я не понял - мой грязный хак не прокатит что ли? по идее должно
Название: Re: Запись структуры в файл с помощью Qt Отправлено: JamS007 от Октябрь 24, 2009, 23:16 Хак прокатил... :) Причем с удовольствием... За что вам - огромное СПАСИБО!.
Но! Как теперь эту информацию прочитать? Название: Re: Запись структуры в файл с помощью Qt Отправлено: Igors от Октябрь 25, 2009, 14:18 Итак, почитав чуть учебник по данной теме понял, что используя Qt можно забыть о записывании структуры в файл таким легким способом... А придется всё писать по очереди с помощью потока ввода/вывода... Правильно поняли. Конечно, то что указал Авварон, работать будет. Но только без Qt объектов и только на одной платформе/компиляторе. Это вынуждает Вас иметь только "С" структуры и значит эффект применения Qt будет равен нулю. А Структура - это так, чтоб красиво было, можно и без нее... Да? (Если не прав - поправьте) Ну как "можно" :) Можно бриться полотенцем или даже шилом но удобно ли это?Название: Re: Запись структуры в файл с помощью Qt Отправлено: Dexel от Октябрь 27, 2013, 02:04 Полотенцем бриться нужно когда руки сильно трусятся после пьянки, - чтобы шею не перерезать ;D
Название: Re: Запись структуры в файл с помощью Qt Отправлено: Fregloin от Октябрь 28, 2013, 11:01 можно еще в QByteArray/QBuffer писать почти привычным вам способом.
QDataStream не подходит, если данные должны читаться не Qt приложениями. |