Russian Qt Forum

Qt => Общие вопросы => Тема начата: blood_shadow от Июль 27, 2010, 15:24



Название: QIODevice::ReadWrite и QIODevice::WriteOnly
Отправлено: blood_shadow от Июль 27, 2010, 15:24
Добрый день!
Недавно начал программировать под Qt и наткнулся на несколько непонятных мне вещей:
1. Ф-ция QString val::loadInputText() const считывает текст с файла C:\\String_value\\input.txt и записует его в текстовое поле textIn, затем по нажатию кнопки "Save" вызывается ф-ция QString val::saveOnFile() которая сохраняет измененный текст с текстового поля в тот же файл, вопрос в следующем - почему если в ф-ции QString val::saveOnFile() записать inputFile->open(QIODevice::ReadWrite); программа перестает правильно работать, а именно не дает записать изменения в файл после удаления нескольких символов(например если в файле строка "In forest many trees" отредактировать ее до "In forest many" всеравно окажется в файле "In forest many trees")?

Код:

QString val::loadInputText() const
{
        QFile *inputFile = new QFile("C:\\String_value\\input.txt");
        inputFile->open(QIODevice::ReadWrite);

        QTextStream in(inputFile);
        QString inLine = in.readAll();
        inputFile->close();
        delete inputFile;

        textIn->setPlainText(inLine);
        return inLine;
}

QString val::saveOnFile()
{
    QFile *inputFile = new QFile("C:\\String_value\\input.txt");
    [color=yellow]inputFile->open(QIODevice::WriteOnly);[/color]

    QTextStream in(inputFile);
    in.setCodec("Windows-1251");
    QString inLine = textIn->toPlainText();

    in << inLine;
    inputFile->close();

    delete inputFile;

    return inLine;
}


Название: Re: QIODevice::ReadWrite и QIODevice::WriteOnly
Отправлено: Igors от Июль 27, 2010, 15:33
Если файл открыт ReadWrite, его содержимое не удаляется. Вы просто пишете с 0-го байта и имеете "незатертый хвост"  :)


Название: Re: QIODevice::ReadWrite и QIODevice::WriteOnly
Отправлено: blood_shadow от Июль 27, 2010, 15:55
Если файл открыт ReadWrite, его содержимое не удаляется. Вы просто пишете с 0-го байта и имеете "незатертый хвост"  :)
то есть в таком режиме текст пишется поверху?


Название: Re: QIODevice::ReadWrite и QIODevice::WriteOnly
Отправлено: Igors от Июль 27, 2010, 16:07
то есть в таком режиме текст пишется поверху?
да, если файловый указатель (позиция в файле) меньше его размера


Название: Re: QIODevice::ReadWrite и QIODevice::WriteOnly
Отправлено: blood_shadow от Июль 27, 2010, 16:17
то есть в таком режиме текст пишется поверху?
да, если файловый указатель (позиция в файле) меньше его размера
Все стало ясно спасибо большое  :)