Всем привет! Я тут пишу лабку, мне нужно записать массив QString в бинарный файл и потом его так же считать. Задание не использовать QDataStream. Т.е. перед записи массива на диск я сам буду его размечать, а потом уже записывать, это всё делается для того чтобы потом можно было эти базы читать в любой среде программирвоания. Так вот беру создаю массив QString my[0] к примеру.
Привожу код:
QString my[0];
my[0].push_back("Alex");
QFile file;
file.setFileName("C:\\dev.dat");
file.open(QIODevice::WriteOnly);
file.write((char*)&my[0],4);
Аналогично считываю:
QString my[0];
//my[0].push_back("Alex");
QFile file;
file.setFileName("C:\\dev.dat");
file.open(QIODevice::WriteOnly);
file.read((char*)&my[0],4);
Но при считывании получаю пустую строку.
Пожалуйста, помогите, подскажите как мне обойти данную проблему. Далее как проблема будет решена я буду уже размечать массив и писать его на диск.
wtf?
Зачем там массив QString нулевой длины? (насколько я помню, это фишка C, и в C++ не будет работать в некоторых компиляторах).
по существу вопроса - читать/писать объекты таким образом нельзя! Так можно обращаться только с POD (Plain Old Data) типами, и то могут быть проблемы из-за выравнивания полей.
Плюс QString кроме собственно строки содержит еще служебные данные (такие как reference count и т.п.).
В данном случае надо описать свою структуру файла и заполнять ее вручную, взяв только содержимое строки QString - длину (QString::length) и данные (QString::utf16 или QString::unicode)