crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Чтение двоичных файлов
AD
  опции профиля:
сообщение 8.7.2008, 12:20
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Ну задачка в принципе уже решена, но это сделано с помощью WinApi функций, таких как
::ReadFile()
А теперь хочу решить ее с помощью QDataStream. Подскажите, пожалуйста, как правильно скачать в свои структуры из файла! Подскажите, пожалуйста, как это в коде сделать?
Мои предположения: эту иою структуру (обзовем ее T) занести в QVector и потом сделать: QVector<T*> vecT;
QDataStream in(file);
in >> vecT;

правильная мысль? Или надо по-другому?

Сообщение отредактировал AD - 8.7.2008, 13:26
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
ViGOur
  опции профиля:
сообщение 9.7.2008, 10:19
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


А как ты записываешь вектор в файл?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 9.7.2008, 11:21
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(ViGOur @ 9.7.2008, 11:19) *
А как ты записываешь вектор в файл?

Вообще файл уже готовый.
Простейший пример создал и то не работает. Вот код. Где ошибка, в душе не знаю:
struct _str 
{
    int y;
    QString s;
    double n;
    _str(): y(100), s("Hello, Kelly!"), n(0.9652) {}
};
QDataStream& operator>>(QDataStream& in, _str& ls);
QDataStream& operator<<(QDataStream& out, const _str& ls);


QDataStream& operator>>(QDataStream& in, _str& ls)
{
    in >> ls.y >> ls.s >> ls.n;
    return in;
}

QDataStream& operator<<(QDataStream& out, const _str& ls)
{
    out << ls.y << ls.s << ls.n;
    return out;
}

А далее в функции делаю следующее:

QFile fl("nt.dat");
fl.open(QIODevice::WriteOnly);
_str un;
QDataStream out(&fl);
out << un;
fl.close();

un.s = "YYY";
un.n = -0.18;
un.y = 1;

QFile fl1("nt.dat");
fl1.open(QIODevice::ReadOnly);
QDataStream in(&fl);
in >> un;
fl.close();


Пишет правильно, а вот считывает ахинею!

Сделал в приведенном примере кое-какие поправки: стал записывать и считывать через вектор. Записывает он правильно, но в начале плюс ко всему пишет и размер вектора (вот поэтому у меня происходит зацикливание - нет указания на размер вектора). А вот при считывании все-равно в вектор ахинею пишет. Вот код:
_str un;
QVector<_str> unv;
unv.push_back(un);

QFile fl("nt.dat");
fl.open(QIODevice::WriteOnly);
QDataStream out(&fl);
out << unv;
fl.close();

unv[0].y = 1;
unv[0].s = "Hi";
unv[0].n = 1.3;

QFile fl1("nt.dat");
fl1.open(QIODevice::ReadOnly);
QDataStream in(&fl);
in >> unv;
fl.close();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- AD   Чтение двоичных файлов   8.7.2008, 12:20
- - sploid   тогда уж так: QVector< T > vectT; QDataStr...   8.7.2008, 12:54
|- - AD   Помогите пожалуйста, я немного запутался. Вот стру...   8.7.2008, 19:16
- - AD   Кто знает правильное решение, поскажите, пожалуйст...   9.7.2008, 9:37
- - ViGOur   А как ты записываешь вектор в файл?   9.7.2008, 10:19
|- - AD   Цитата(ViGOur @ 9.7.2008, 11:19) А как ты...   9.7.2008, 11:21
- - Гость   Возможно баг. Я вообще не могу найти реализации чт...   9.7.2008, 12:40
|- - AD   Цитата(Гость @ 9.7.2008, 13:40) Возможно ...   9.7.2008, 13:04
- - ViGOur   Копи-пасте вредно для здоровья! Попробуй так:...   9.7.2008, 13:05
|- - AD   Цитата(ViGOur @ 9.7.2008, 14:05) Копи-пас...   9.7.2008, 13:09
- - ViGOur   Приведи оператор operator<<.   9.7.2008, 13:17
|- - AD   Цитата(ViGOur @ 9.7.2008, 14:17) Приведи ...   9.7.2008, 13:22
- - ViGOur   а кто пишет эту структуру? как я понял не ты, прав...   9.7.2008, 13:42
|- - AD   Цитата(ViGOur @ 9.7.2008, 14:42) а кто пи...   9.7.2008, 14:13
- - ViGOur   А как ты читаешь на MFC? read и write работаю на...   9.7.2008, 14:16
|- - AD   Цитата(ViGOur @ 9.7.2008, 15:16) А как ты...   9.7.2008, 14:40
- - ViGOur   Цитата(AD @ 9.7.2008, 15:40) А что исполь...   9.7.2008, 14:45
|- - AD   Цитата(ViGOur @ 9.7.2008, 15:45) QFile Во...   9.7.2008, 14:58
- - ViGOur   Вот так: _str strIn; QFile f1("nt.dat...   9.7.2008, 15:18
- - void*   может проще для таких структур данных использовать...   9.7.2008, 15:19
- - AD   Цитата(void* @ 9.7.2008, 16:19) может про...   9.7.2008, 15:35


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 17:56