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