Russian Qt Forum
Ноябрь 27, 2024, 04:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: вопрос по считыванию данных из файла  (Прочитано 3542 раз)
merke
Гость
« : Ноябрь 26, 2010, 13:04 »

Всем привет!

В общем очень нужна Ваша помощь.

Есть переменная char priznak_nakopitelya[9];

сначала в неё добавляются следующие данные
Код:
const char GLOBAL_PRIZNAK_NAKOPITELYA[9] = "ppp#zizo";
strcpy(priznak_nakopitelya, GLOBAL_PRIZNAK_NAKOPITELYA);

Далее я пишу эту переменную в файл вот так:

Код:
 QDataStream stream(&file);
 stream.device()->seek(1);
 stream.writeRawData((char*)priznak_nakopitelya,8);

Далее я считываю данную переменную из файла вот так:
Код:
    QDataStream stream(&file);
    stream.device()->seek(1);
    stream.readRawData((char*)priznak_nakopitelya, 8);
    priznak_nakopitelya[8] = '\0';

И в новый файл пишу её же вот так:

Код:
 QDataStream stream(&file);
 stream.device()->seek(1);
 stream.writeRawData((char*)priznak_nakopitelya,8);

И получается следующая проблема при считывании уже с нового файла я не могу правильно считать переменную priznak_nakopitelya
Я получаю значение ppp#z000

Не могу понять в чем дело, пожалуйста, помогите разобраться! Буду очень рад помощи.

С уважением, Александр!


Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Ноябрь 26, 2010, 13:16 »

А Вы файл откройте и посмотрите записалось ли. Если делаете seek(1) при записи, нужна уверенность что длина файла не нулевая. Лучше использовать константу или переменную вместо "1". Также заменить "8" на sizeof(priznak_nakopitelya) - 1. Незачем приводить к (char *) массив char. Добавить проверку ошибок. В общем, надо почистить текст
Записан
merke
Гость
« Ответ #2 : Ноябрь 26, 2010, 13:26 »

я делаю seek(1) так как файл уже размечен.
убрал везде (char*)
переписал sizeof()-1

И всё равно тоже самое.

Может я не правильно считываю в char переменную?
Записан
BRE
Гость
« Ответ #3 : Ноябрь 26, 2010, 13:31 »

Контролируй (qDebug) ключ после каждой операции, найдешь в каком месте он меняется на не правильный.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Ноябрь 26, 2010, 13:34 »

я делаю seek(1) так как файл уже размечен.
убрал везде (char*)
переписал sizeof()-1

И всё равно тоже самое.

Может я не правильно считываю в char переменную?
Правильно (во всяком случае я ошибки не вижу). Но есть еще 10 мест где она возможна - файл не был открыт, забыли закрыть, неверно выделили память под саму переменную и.т.п. Поэтому см. содержимое файла - правильно ли записалось. А прочитали - см. переменную в отладчике или шлепните на консоль
Записан
merke
Гость
« Ответ #5 : Ноябрь 26, 2010, 14:05 »

Когда я считываю эту переменную с файла и записываю её в другой тут то и баг. Не иогу понять(((
Записан
joker
Новичок

Offline Offline

Сообщений: 49


Просмотр профиля
« Ответ #6 : Ноябрь 26, 2010, 18:31 »

Чтото у тебя еще происходит... гдето ты рушишь строку...

Код:
#include <QtCore>


const char GLOBAL_PRIZNAK_NAKOPITELYA[9] = "ppp#zizo";

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    char priznak_nakopitelya[9];
    strcpy(priznak_nakopitelya, GLOBAL_PRIZNAK_NAKOPITELYA);

    QFile file("c:\\1.txt");
    if(!file.open(QIODevice::WriteOnly)) return -1;

    QDataStream stream(&file);
    stream.device()->seek(1);
    stream.writeRawData((char*)priznak_nakopitelya,8);
    file.close();

    if(!file.open(QIODevice::ReadOnly)) return -2;
    QDataStream stream2(&file);
    stream2.device()->seek(1);
    stream2.readRawData((char*)priznak_nakopitelya, 8);
    priznak_nakopitelya[8] = '\0';

    qDebug()<<priznak_nakopitelya;

    return 0;//a.exec();
}

Работает, выдает ppp#zizo
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.127 секунд. Запросов: 22.