Russian Qt Forum

Qt => Общие вопросы => Тема начата: merke от Ноябрь 26, 2010, 13:04



Название: вопрос по считыванию данных из файла
Отправлено: 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

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

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




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


Название: Re: вопрос по считыванию данных из файла
Отправлено: merke от Ноябрь 26, 2010, 13:26
я делаю seek(1) так как файл уже размечен.
убрал везде (char*)
переписал sizeof()-1

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

Может я не правильно считываю в char переменную?


Название: Re: вопрос по считыванию данных из файла
Отправлено: BRE от Ноябрь 26, 2010, 13:31
Контролируй (qDebug) ключ после каждой операции, найдешь в каком месте он меняется на не правильный.


Название: Re: вопрос по считыванию данных из файла
Отправлено: Igors от Ноябрь 26, 2010, 13:34
я делаю seek(1) так как файл уже размечен.
убрал везде (char*)
переписал sizeof()-1

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

Может я не правильно считываю в char переменную?
Правильно (во всяком случае я ошибки не вижу). Но есть еще 10 мест где она возможна - файл не был открыт, забыли закрыть, неверно выделили память под саму переменную и.т.п. Поэтому см. содержимое файла - правильно ли записалось. А прочитали - см. переменную в отладчике или шлепните на консоль


Название: Re: вопрос по считыванию данных из файла
Отправлено: merke от Ноябрь 26, 2010, 14:05
Когда я считываю эту переменную с файла и записываю её в другой тут то и баг. Не иогу понять(((


Название: Re: вопрос по считыванию данных из файла
Отправлено: joker от Ноябрь 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