Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с записью в файл
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие
AD
Использую QFile* file. Файл открыт для чтения/записи. в середине файла надо заменить одну строчку. Как это сделать?
Код
QTextStream in(file);
in << string;

Почему-то вставляет в конец файла строку.
Litkevich Yuriy
из того что ты привел, ничто неуказывает на замену строки, а запись в файл обычно идет последовательно, если ты его толко открыл и писать начал, то будет дописывать.
AD
Цитата(Litkevich Yuriy @ 14.4.2008, 20:21) *
из того что ты привел, ничто неуказывает на замену строки, а запись в файл обычно идет последовательно, если ты его толко открыл и писать начал, то будет дописывать.

как корректно заменить строку? В файле уже есть данные, мне необходимо заменить только некоторые строчки! При этом на функцию setString() он совсем плохо реагирует!!! В итоге и зависает!
Litkevich Yuriy
тут зависит знаешь ли ты точное место нахождение строки или нет.
честно говоря в Qt'ях с файлом не работал, но опираясь на Борланд, и я полагаю в Qt'ях также, примерно следующая схема:

Если знаешь номер строки то, например, так:
Открыть файл,
в цикле читать строку с помощью QTextStream::readLine пока не доберешся до (нужной -1),
запомнить позицию в файле с помощью QIODevice::pos()
прочитать следующую (нужную) строку,
изменить ее,
передвинуть файловый указатель до запомненой позиции с помощью QIODevice::seek (),
записать строку.

Если незнаешь номер строки, то нужно каждую анализировать.
---
Может есть и удобнее способ, незнаю.
Tonal
Это сработает, только если длинна исходной строки и замены одинаковая.
Если нет - или получишь огрызок старой, или затрёшь кусок следующей.

Классически алгоритм совсем простой:
1) читаешь исходный файл построчно.
2) строки, возможно изменённые пишешь в выходной файл.
3) после того, как всё прочитал/записал удаляешь исходный.
4) переименовываешь выходной в исходный.
Litkevich Yuriy
ну да так оно правильней
AD
Цитата(Tonal @ 15.4.2008, 8:26) *
Классически алгоритм совсем простой:
1) читаешь исходный файл построчно.
2) строки, возможно изменённые пишешь в выходной файл.
3) после того, как всё прочитал/записал удаляешь исходный.
4) переименовываешь выходной в исходный.

Так и подумал! :)
Какими строчками кода удалить файл, какими переименовать? Создать файл с помощью флажка trancate?
AD
Как переименовывать файл с помощью кода Qt? Как его удалять?
AD
В обычном Си для создания и открытия файла используется значок truncate. А в Qt как это сделать?
Litkevich Yuriy
в Qt тоже такой есть OpenModeFlag

для создания нового файла тебе этот флаг погоды не сделает, ведь он все равно пустой.
AD
Цитата(Litkevich Yuriy @ 18.4.2008, 11:41) *
в Qt тоже такой есть OpenModeFlag

для создания нового файла тебе этот флаг погоды не сделает, ведь он все равно пустой.

правильный код или нет?
                modif_fl = new QFile(modifFilename);
        modif_fl -> open(QIODevice::WriteOnly | QIODevice::Truncate);

Под правильностью я понимаю, что создасться файл для записи с именем modifFilename.
Мне и нужен пустой файл :)
Litkevich Yuriy
если modifFilename - строковая переменная то помоему все верно, если само имя файла, то в кавычки возьми
AD
Цитата(Litkevich Yuriy @ 18.4.2008, 12:26) *
если modifFilename - строковая переменная то помоему все верно, если само имя файла, то в кавычки возьми

Строковая переменная, при этом включающая путь к файлу! :)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.