![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
AD |
![]()
Сообщение
#1
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Использую QFile* file. Файл открыт для чтения/записи. в середине файла надо заменить одну строчку. Как это сделать?
Код
Почему-то вставляет в конец файла строку. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
из того что ты привел, ничто неуказывает на замену строки, а запись в файл обычно идет последовательно, если ты его толко открыл и писать начал, то будет дописывать.
|
|
|
AD |
![]()
Сообщение
#3
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
из того что ты привел, ничто неуказывает на замену строки, а запись в файл обычно идет последовательно, если ты его толко открыл и писать начал, то будет дописывать. как корректно заменить строку? В файле уже есть данные, мне необходимо заменить только некоторые строчки! При этом на функцию setString() он совсем плохо реагирует!!! В итоге и зависает! |
|
|
Litkevich Yuriy |
![]()
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
тут зависит знаешь ли ты точное место нахождение строки или нет.
честно говоря в Qt'ях с файлом не работал, но опираясь на Борланд, и я полагаю в Qt'ях также, примерно следующая схема: Если знаешь номер строки то, например, так: Открыть файл, в цикле читать строку с помощью QTextStream::readLine пока не доберешся до (нужной -1), запомнить позицию в файле с помощью QIODevice::pos() прочитать следующую (нужную) строку, изменить ее, передвинуть файловый указатель до запомненой позиции с помощью QIODevice::seek (), записать строку. Если незнаешь номер строки, то нужно каждую анализировать. --- Может есть и удобнее способ, незнаю. |
|
|
Tonal |
![]()
Сообщение
#5
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
Это сработает, только если длинна исходной строки и замены одинаковая.
Если нет - или получишь огрызок старой, или затрёшь кусок следующей. Классически алгоритм совсем простой: 1) читаешь исходный файл построчно. 2) строки, возможно изменённые пишешь в выходной файл. 3) после того, как всё прочитал/записал удаляешь исходный. 4) переименовываешь выходной в исходный. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#6
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
ну да так оно правильней
|
|
|
AD |
![]()
Сообщение
#7
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Классически алгоритм совсем простой: 1) читаешь исходный файл построчно. 2) строки, возможно изменённые пишешь в выходной файл. 3) после того, как всё прочитал/записал удаляешь исходный. 4) переименовываешь выходной в исходный. Так и подумал! ![]() Какими строчками кода удалить файл, какими переименовать? Создать файл с помощью флажка trancate? |
|
|
AD |
![]()
Сообщение
#8
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Как переименовывать файл с помощью кода Qt? Как его удалять?
|
|
|
ViGOur |
![]()
Сообщение
#9
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
AD |
![]()
Сообщение
#10
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
В обычном Си для создания и открытия файла используется значок truncate. А в Qt как это сделать?
|
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 18.2.2025, 18:36 |