Полная версия этой страницы:
Проблема с записью в файл
Использую QFile* file. Файл открыт для чтения/записи. в середине файла надо заменить одну строчку. Как это сделать?
Код
QTextStream in(file);
in << string;
Почему-то вставляет в конец файла строку.
Litkevich Yuriy
14.4.2008, 19:21
из того что ты привел, ничто неуказывает на замену строки, а запись в файл обычно идет последовательно, если ты его толко открыл и писать начал, то будет дописывать.
Цитата(Litkevich Yuriy @ 14.4.2008, 20:21)

из того что ты привел, ничто неуказывает на замену строки, а запись в файл обычно идет последовательно, если ты его толко открыл и писать начал, то будет дописывать.
как корректно заменить строку? В файле уже есть данные, мне необходимо заменить только некоторые строчки! При этом на функцию setString() он совсем плохо реагирует!!! В итоге и зависает!
Litkevich Yuriy
14.4.2008, 20:33
тут зависит знаешь ли ты точное место нахождение строки или нет.
честно говоря в Qt'ях с файлом не работал, но опираясь на Борланд, и я полагаю в Qt'ях также, примерно следующая схема:
Если знаешь номер строки то, например, так:
Открыть файл,
в цикле читать строку с помощью QTextStream::readLine пока не доберешся до (нужной -1),
запомнить позицию в файле с помощью QIODevice::pos()
прочитать следующую (нужную) строку,
изменить ее,
передвинуть файловый указатель до запомненой позиции с помощью QIODevice::seek (),
записать строку.
Если незнаешь номер строки, то нужно каждую анализировать.
---
Может есть и удобнее способ, незнаю.
Это сработает, только если длинна исходной строки и замены одинаковая.
Если нет - или получишь огрызок старой, или затрёшь кусок следующей.
Классически алгоритм совсем простой:
1) читаешь исходный файл построчно.
2) строки, возможно изменённые пишешь в выходной файл.
3) после того, как всё прочитал/записал удаляешь исходный.
4) переименовываешь выходной в исходный.
Litkevich Yuriy
15.4.2008, 8:44
ну да так оно правильней
Цитата(Tonal @ 15.4.2008, 8:26)

Классически алгоритм совсем простой:
1) читаешь исходный файл построчно.
2) строки, возможно изменённые пишешь в выходной файл.
3) после того, как всё прочитал/записал удаляешь исходный.
4) переименовываешь выходной в исходный.
Так и подумал!

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

в Qt тоже такой есть
OpenModeFlagдля создания нового файла тебе этот флаг погоды не сделает, ведь он все равно пустой.
правильный код или нет?
modif_fl = new QFile(modifFilename);
modif_fl -> open(QIODevice::WriteOnly | QIODevice::Truncate);
Под правильностью я понимаю, что создасться файл для записи с именем modifFilename.
Мне и нужен пустой файл
Litkevich Yuriy
18.4.2008, 11:26
если modifFilename - строковая переменная то помоему все верно, если само имя файла, то в кавычки возьми
Цитата(Litkevich Yuriy @ 18.4.2008, 12:26)

если modifFilename - строковая переменная то помоему все верно, если само имя файла, то в кавычки возьми
Строковая переменная, при этом включающая путь к файлу!
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.